您的位置:首页 > 产品设计 > UI/UE

排序---交换排序---快速排序Quick Sort

2011-08-08 15:02 204 查看
快速排序---Quick Sort 基本思路: 分治思想,将一个大的数据序列分割成两个子序列,然后再依次将两个子序列划分成更小的两个,这里就能很明显的看出快速排序的时间复杂度是与2 的对数有关。 划分的标准是找到序列中数据居中的值做为key值,怎么取得key值,就可以判断出算法的快慢来。通常比较简单的情况是将序列的第一个值做为key值。然后通过交换的思路,将序列划分为左、右两个子序列来,划分后的结果是左边的子序列的值都比key值小,右边的子序列的值都比key值大,key值居于中间。 算法实现: int A[] = {49,38,65,97,76,13,27,49}void qsort(int left, int right){ int pos = A[left]; int empty = left; /*每次都是先把最左边的取出来*/ int p = left, q = right; int mid = 0; /*将pos放在中间,左边的比它小,右边的比它大*/ while(p<q) {/*先做右边,把右边比pos小的放在pos的位置上,因为开始是把最左边的空出来了*/while(p<q){if (pos>A[q]){A[empty]=A[q]empty = q;/*更改空位置*/break;}else{q--;}} while(p<q){if(pos<A[p]){A[empty]=A[p]empty=p;break;}else{p++;}} } A[empty]=pos; mid=empty; if (left<q) {qsort(left,q-1); } if(p<right) {qsort(p+1,right); } }

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: