无聊小玩意 用sort实现数组的逆序!!

本文介绍了一个使用C++实现的排序示例,通过随机生成整数并利用STL库中的sort函数进行排序展示不同比较函数的效果。

#include <iostream>
#include <cstdlib>
#include <cstdio>
#include <cmath>
#include <vector>
#include <algorithm>

using namespace std;

bool cmp(int a, int b)
{
    return true;
}

int main()
{
	vector<int>Q;
	for(int i = 1; i <= 10; i++)Q.push_back(rand());

        for(int i = 0; i < Q.size(); i++)
	cout <<Q[i]<<" ";
	cout << endl;

       sort(Q.begin(),Q.end(),cmp);
	for(int i = 0; i < Q.size(); i++)
	cout <<Q[i]<<" ";
	cout << endl;

	sort(Q.begin(),Q.end(),cmp);
	for(int i = 0; i < Q.size(); i++)
	cout <<Q[i]<<" ";
	cout << endl;

	sort(Q.begin(),Q.end(),cmp);
	for(int i = 0; i < Q.size(); i++)
	cout <<Q[i]<<" ";
	cout << endl;

    return 0;
}

你能猜到上面会是什么样的结果么 ??   逆序效果



bool cmp(int a, int b)
{
    return false;
}

改成false之后,将保持原序








### 实现数组逆序的思路 要实现数组逆序,可以通过手动编写函数来完成。该过程可以分为两个主要步骤: 1. **计算数组长度**:由于不能使用库函数(如 `strlen`),需要自定义一个函数来计算字符串的长度。 2. **交换数组元素**:通过递归或非递归的方式,将数组中的元素从首到尾依次交换,从而实现数组逆序。 ### 非递归方式实现数组逆序 以下是一个不使用库函数的非递归实现方法: ```c #include <stdio.h> // 自定义计算字符串长度的函数 int my_strlen(char* str) { int count = 0; while (*str != '\0') { count++; str++; } return count; } // 实现字符串逆序的函数 void reverse_string(char* str) { int left = 0; int right = my_strlen(str) - 1; while (left < right) { char tmp = str[left]; str[left] = str[right]; str[right] = tmp; left++; right--; } } int main() { char arr[] = "abcdef"; reverse_string(arr); printf("%s\n", arr); return 0; } ``` 此代码通过 `my_strlen` 函数获取字符串长度,并在 `reverse_string` 函数中使用双指针法进行字符交换[^3]。 ### 递归方式实现数组逆序 递归方法的核心思想是将问题分解为更小的子问题。以下是递归实现的代码示例: ```c #include <stdio.h> // 自定义计算字符串长度的函数 int my_strlen(char* arr) { if (*arr == '\0') { return 0; } else { return 1 + my_strlen(arr + 1); } } // 使用递归实现字符串逆序 void reverse(char* arr) { char tmp = *arr; int len = my_strlen(arr); if (len > 1) { *arr = *(arr + len - 1); *(arr + len - 1) = '\0'; reverse(arr + 1); *(arr + len - 1) = tmp; } } int main() { char arr[8] = "abcdefg"; reverse(arr); printf("%s\n", arr); return 0; } ``` 在递归实现中,每次递归调用都会处理缩小范围后的子数组,直到满足终止条件(即数组长度小于等于1)[^4]。 ### 总结 - **非递归方式**:使用双指针法,效率高且逻辑清晰。 - **递归方式**:代码简洁,但需要注意递归深度可能导致栈溢出的问题。 两种方法均能有效实现数组逆序,选择哪一种取决于具体需求和场景。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值