您的位置:首页 > 其它

排序算法——快速排序

2016-03-15 21:57 274 查看
原理
采用分治的思想。主要分为三步:第一步,选择一个基数。
第二步,将排序数组在分区的过程,将比该基数小的放在左边,比该基数大的放在右边。第三步,对左右分区执行同样的操作直到剩下一个数字。分析
在最坏的情况下,也就是数据的划分不平衡,一部分是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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息