您的位置:首页 > 其它

快速排序总结

2015-08-26 15:44 453 查看
算法的实现很关键,但是思路更关键,有了思路实现就很容易。快速排序的思路:一趟快速排序后将待排序列分为以关键字(从待排序列中选取的)为轴的两部分,左半部分小于key,右半部分大于key,然后分别对两部分分别递归进行快速排序,直到low>high。每一趟快速排序的思路:首先从high处往前扫描第一个小于key的元素,将其赋值给a[low++](别忘了low<high),然后从low开始向前扫描第一个大于key的元素,将其赋值给a[high--](同样别忘了low<high这个条件)。

以前老是对快速排序记不太清晰的原因,就是将其的总体思路和每一趟快速排序的思路混在一起记忆,弄得不是忘了这个条件,就是想不清后续。关键处代码:

//快速排序,对于复杂排序先记忆大的排序思路,然后才是每一趟的排序思路

QuickSort(int a[],int low, int high){
if(lov < high ){//递归结束的条件
int mid = sort(a,low,high);
QuickSort(a,low,mid-1);
QuickSort(a,mid+1,high);
}

}

int sort (int a[],int low,int high){
int key = a[low];//轴值

while(low < high){

while(a[high] >= key && low < high){
high--;
}

a[low++] = a[high];

while(a[low] <= key && low < high){
low++;
}

a[high--] = a[low];

}

a[low] = key;//注意这里:前面的交换一直没处理key元素,
//我们知道key元素就是轴值因此在最后的时候出来
return low;
}


确实快速排序算法作为第一个比较复杂的排序算法不太容易记忆,或者说直接写出全部的代码不太容易,至少对于我是这样子的,原因就是把总体的思路和每一趟排序的思路给弄混了,应该先是总的思路,然后每一趟排序的具体的策略,这样就比较好记忆了。

PS:虽说算法要理解记忆,但是感觉该背的还是要背的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: