标准库里的sort函数原理。
网上找了一篇文章,整篇文章只有代码是完全我自己写的。。。
出处:https://blog.csdn.net/vayne_xiao/article/details/53508973
代码:
#include <iostream>
#include <vector>
using namespace std;
//不使用全局变量
int tot = 0; //统计步数
void quick_sort(vector<int>& a, int start, int end) {
if(start >= end) return;
int first = start, last = end, key = a[start];
while(first < last) {
cout << ++tot << endl; //输出统计步数
for( ; a[last] >= key && first < last; --last); //从后面开始找 找小的
a[first] = a[last]; //找到小的放到开头
for( ; a[first] <= key && first < last; ++first); //从前面开始找 找大的
a[last] = a[first]; //找到大的放到最后
a[first] = key; //中间值 放到 中间
}
quick_sort(a, start, first - 1); //递归前后两部分
quick_sort(a, first + 1, end);
}
int main() {
int temp, n;
vector<int> a; //局部变量传递参数
cin >> n;
for(int i = 0; i < n; i++) cin >> temp, a.push_back(temp);
quick_sort(a,0,n-1);
for(int i = 0; i < n; i++) cout << a[i] << " ";
return 0;
}
关于原理的证明看不懂。但知道怎么用我觉得已经差不多了。
代码中我运用了 for()循环来写, 个人觉得这样写代码好看一点。
这个排序的算法真的是挺快的, 整体循环 在 n, 内嵌循环不会很大,整体小于 n^2.