原理
采用分治的思想。主要分为三步:
第一步,选择一个基数。
第二步,将排序数组在分区的过程,将比该基数小的放在左边,比该基数大的放在右边。
第三步,对左右分区执行同样的操作直到剩下一个数字。
分析
在最坏的情况下,也就是数据的划分不平衡,一部分是n-1个数字,另一部分没有数据,并且每次划分都是这种情况,则其时间复杂度就是O(n2);在一般情况(包括最好),其时间复杂度为O(nlog2n);由于以下实现过程在原数组的基础上对数组进行排序,故其空间复杂度是O(1)。
C语言实现
void qsort(int *arr, int start, int end) { int high = end, low = start; int value = arr[start]; if(NULL != arr || start < end){ while(low < high){ while(low < high && arr[high] > value){ high--; } if(low < high){ arr[low] = arr[high]; low++; } while(low < high && arr[low] < value){ low++; } if(low < high){ arr[high] = arr[low]; high--; } } arr[low] = value; qsort(arr, start, low - 1); qsort(arr, low + 1, end); } }