快速排序在最优情况下,它的排序时间复杂度为O(nlog2n)。即每次划分序列时,能均匀分成两个子串。但最差情况下它的时间复杂度将是O(n*n)。
快速排序是种不稳定的排序方法。
快速排序是找出一个元素(理论上可以随便找一个)作为基准,然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值 都不小于基准值,如此作为基准的元素调整到排序后的正确位置。递归快速排序,将其他n-1个元素也调整到排序后的正确位置。最后每个元素都是在排序后的正 确位置,排序完成。所以快速排序算法的核心算法是分区操作,即如何调整基准的位置以及调整返回基准的最终位置以便分治递归。
int partition(int* data, int start, int end) { if( data == NULL || start >= end ) { return 0; } int temp = data[start]; //把第一个数作为基准 while(start < end) { while(start < end && data[end] > temp) //寻找比基数小的值 --end; data[start] = data[end]; while(start< end && data[start] < temp) //寻找比基数大的值 ++start; data[end] = data[start]; } data[start]= temp; return start; } void QuickSort(int* data,int start,int end) { if( data == NULL || start < 0 || start >=end ) return; int index = partition(data,start,end); QuickSort(data,start,index-1); QuickSort(data,index+1,end); }