快速排序是一种使用性非常强的排序算法,虽然它最坏的情况下时间复杂度O (N ^ 2),但平均时间复杂度是O (N * logN),并在内存的使用,程序算法的复杂性上表现优秀,尤其是对快速排序进行随机化的可能,快速排序是最使用的一种算法之一。
,算法思想:
,,1.创建一个临时变量,把数组中最右边的值保存起来,最右边就形成一个坑。
,,2.然后找左边大于临时变量的那个值放到坑里,这样左边会形成新的坑。
,,3.在找右边小于临时变量的那个值放到新的坑里,就这样一直找。
,,4.知道找完,最后把临时变量放到最后形成的那个坑里。
,,5.在把这个数组分成两个子序列,特点:左边的子序列中的数小于等于右边的子序列中的数。
,,6.在通过递归调用,来排序子序列。
,,5.知道子序列排完,然后合并。(由于子序列是就地序列,所以合并不需要操作,排序已经完成)
实现代码:
排序。h中
int SingleSort (int *, int 左,int 右) { ,,,维护(一个); int 才能;tmp =,[右];//临时变量保存值 ,,,,,,,while (left & lt;,右) ,,,,{ ,,,,,,,,,,//找左边大于等于tmp的数 ,,,,,,,,,,,,,while (left & lt;, right&, tmp 祝辞=,(左)) ,,,,,,,,,{ ,,,,,,,,,,,,,,,,,,左+ +; ,,,,,,,,,,,,} ,,,,,,,,,,if (left & lt;,右) ,,,,,,,,,,,,,,,{ ,,,,,,,,,,,,,,,,,,一个[,],=,(左);//把值给右边,然后— ,,,,,,,,,,} ,,,,,,,,,,//找右边小于等于tmp的值 ,,,,,,,,,,,,,while (left & lt;, right&, tmp & lt;=,(右)) ,,,,,,,,{ ,,,,,,,,,,,,,,,,,,,, ,,,,,,,,,,,} ,,,,,,,,,,if (left & lt;,右) ,,,,,,,,,,,,,,,{ ,,,,,,,,,,,,,,,,,,一个(左+ +),=,[右];//把值给左边,然后+ + ,,,,,,,,,,} ,,} ,,(左),=,tmp; ,,,,,return ; } void 快速排序(int * arr, int 左,int 右) { ,,,,if (arr ==, NULL) ,,,{ ,,,,,,,,,,返回; ,,,,} ,,if (left & lt;,右) ,,,,,,,{ ,,,,,,,,,,//递归调用 ,,,,,,,,,,,,,int div =, SingleSort(加勒比海盗,,左,右); ,,,,,,,,,,,,快速排序(加勒比海盗,,左,,div 作用;1); ,,,,,,,,,,,,,快速排序(加勒比海盗,div +, 1,右); ,,,,} }//打印函数 void 打印(int * arr, int 大小) { ,,,,for (int 小姐:=,0;,小姐:& lt;,大小;,我+ +) ,,{ ,,,,,,,,,,cout & lt; & lt;, arr[我],& lt; & lt;,“,”; ,,} ,,cout & lt; & lt;, endl; }
测试。cpp中
# includeusing namespace 性传播疾病; # include “Sort.h” void 测试() { int 才能arr[],=,{, 3, 9日,7日,6日,,1,,2,4,8日,0,,5,}; ,,,,,,快速排序(加勒比海盗,,0,sizeof (arr),/, sizeof (arr [0]) 1); ,才能打印(加勒比海盗,sizeof (arr),/, sizeof (arr [0])); } int main () { ,,测试(); ,,,,系统(“暂停”); ,,,return 0; }
,我曾经看过看过一篇博客,快速排序对小范围数字排序会花费很多时间,通过我查询资料得知,数字总量小于13日,用直接插入排序表较好,超过这个数字用快速排序。然后我就把代码改了一下。
//直接插入排序 void InsertSort (int *, int 大小) { ,,,,,,,int 终结; ,,,int tmp; null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null null快速排序的分析与实现