(学习基础,虽然现在的库里都封装好了,但是可以学习基本思想。)
思想:快速排序就是找一个中枢(正常是第一个),以升序为例将小于中枢的放在数组左边,将大于中枢的放在数组右边。然后左右两边继续递归下去。
快速排序越接近无序效率越高,时间复杂度最好的是O(nlog2n),待排接近有序的最坏的情况是O(log2n),空间复杂度是O(log2n)
void QuickSort(vector总结:&qs, int low, int high) { //vector ::iterator temp=qs.begin(); //正常将头作为中枢 //vector ::iterator i = qs.begin(); //vector ::iterator j = qs.end() - 1; //vector ::iterator i = low, j = high; int i = low, j = high; if (i < j) { //不加会导致越界死循环 int temp = qs[i]; while (i < j) { //从右边开始检索 while (j > i && qs[j] > temp) --j; //从右往左直到找到一个比temp小的值 if (i < j) { qs[i] = qs[j]; ++i; } while (i < j && qs[i] < temp) ++i; if (i < j) { qs[j] = qs[i]; --j; } } qs[i] = temp; QuickSort(qs, low, i - 1); QuickSort(qs, i + 1, high); } } int main(){ vector nums = { 4,3,21,5,2,10,7 }; QuickSort(nums, 0,nums.size()-1); for (vector ::iterator ii = nums.begin(); ii != nums.end(); ++ii) cout << *ii << endl; return 0; }
快速排序并不难,但是里面的一些有界性还是要好好看看,另外这边我因为在学stl,所以都希望尝试使用一些没用过的数据结构,还有我这边本来想直接使用迭代器来进行下标比对,但是除了find()我没有找到合适的函数,所以哪位大才看见了,可以教一下我。



