通俗易懂讲c++中的sort函数和实例

通俗说明用法:
c++中的sort函数一般用来对数组进行排序,有三个参数,第一个参数是是数组的起始位子,第二个参数为你要排序的数组的终止位子。第三个参数一般是排序的条件,可以通过这个参数达到各种各样的排序(后面再讲),也可以不写,默认是升序。
如:int arr[5]={1,3,2,5,4}. 操作:sort(arr,arr+5). 结果{1,2,3,4,5} //默认升序
如: int arr[5]={1,3,2,5,3}. 操作:sort(arr,arr+3) 结果{1,2,3,5,4} //对数组可以部分操作

这里我对第三个参数进行详细解释:第三个参数可以是一个函数,如果该函数返回为真,就将操作对象位子不变,否则交换位子(后面有例子)。我们可以通过调整该函数的内容来控制,当某个条件满足时返回值的真假。
如:例如一个数组{32,3}这两个数如何拼接组合达到的数最小,两种情况323,332。显然323小。这类问题可以用sort来进行操作。
代码如下:
int arr[3]={3,32,321} // 组成最小数是321323
sort(arr,arr+3,cmp). //对数组三个位子进行操作,条件是cmp函数,一般是bool类型函数

static bool cmp(int a, int b)
{
string A = to_string(a)+to_string(b);
string B =to_string(b)+to_string(a);
return A<B;
}
//函数的意思是sort函数操作的对象数组中两个挨着的顺序的元素,分别赋值到a和b上。通过一系列操作,满足条件某个条件(题中条件是A<B),返回如果真,两个数顺序不变,如果返回假,两个元素交换位子。
详细解读上面得到最小值321323的过程:
从sort函数开始,将数组前两个值3,32丢入cmp中。即a=3,b=32.先将a和b转换成字符串
再拼接故A=“332” B=“323” 故return A<B这个条件是假值,sort函数将这两个值的位子交换。此时arr={32,3,321}.
接下来类似操作依次得到结果是:
arr={32,321,3}
arr={321,32,3}。
将上述数组遍历输出及得到结果。(到这里sort内容讲完)

上述例子来自剑指 offer:(有兴趣可以去刷一刷)
题目如下:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。

解答代码如下:
class Solution {
public:
string PrintMinNumber(vector< int> numbers) {
int len = numbers.size();
if(len == 0) return “”;
sort(numbers.begin(), numbers.end(), cmp);
string res;
for(int i = 0; i < len; i++){
res += to_string(numbers[i]);
}
return res;
}
static bool cmp(int a, int b){
string A = to_string(a) + to_string(b);
string B = to_string(b) + to_string(a);
return A < B;
}
};

猜你喜欢

转载自blog.csdn.net/weixin_42615157/article/details/88770489