标签:
快速排序是由东尼·霍尔所发展的一种排序算法。在平均状况下,排序n个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n)算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。
快速排序使用分治法(Divide and conquer)策略来把一个序列(list)分为两个子序列(sub-lists)。
步骤为:
个人觉得快速排序给初学者最大的意义就是它分治法的思想。在程序设计过程中也是经常用到。像Microsoft,tencent等知名企业的面试笔试中也是常常提及快速排序。
下面是快排的动态图:
分类 | 排序算法 |
---|---|
数据结构 | 不定 |
最差时间复杂度 | ![]() |
最优时间复杂度 | ![]() |
平均时间复杂度 | ![]() |
最差空间复杂度 | 根据实现的方式不同而不同 |
C代码:
本实现的空间复杂度是O(n)。这样难免及会有较多的内存移动操作,但同时节省了空间,如果不希望过多的内存移动操作,可以额外申请内存来实现。
1 void quick_sort(int src[] , int len) 2 { 3 if( len <= 1 ) return; 4 int pivot = 0; 5 //确定分治的基数 6 for( int n = 0 ; n < len ; n++){ 7 if( src[pivot] > src[n] ){ 8 int swap = src[n]; 9 for( int m = n ; m >pivot ; m-- ){ 10 src[m] = src[m-1]; 11 } 12 src[pivot] = swap; 13 pivot++; 14 } 15 } 16 //递归处理 17 quick_sort(src,pivot); 18 quick_sort(src+pivot+1,len-pivot-1); 19 }
处理过程:
标签:
原文地址:http://www.cnblogs.com/jvane/p/4494638.html