C++之算法快速排序
快速排序
思路:
一个数组,随便选一个做基数,比它大的放他右边,比它小的放它左边,一轮下来就分成两组了,这两组再分别按刚才方法递归。
具体操作:
一个数组,第一个做基数取出来存在一个变量里,设置两个游标分别为数组开始和结束,
开始循环:
先按照游标从右到左依次选一个和基数比,该数比基数大就把结束游标向左移一位,比基数小的就把该数放到开始游标上去,此时再按照游标从左向右依次选一个数和基数比,该数比基数小就把开始游标向右移一位,比基数大就该数放到结束游标上去,再从新开始循环。
直到两个游标相等,开始递归。
int main () { int data[] = {34,65,12,43,67,5,78,10,3,70} , k; int len=sizeof(data)/sizeof(int); quickSort(data , 0 , len-1); for (int i = 0; i < len; i++) { cout<<data[i]<<"\n"; } } void quickSort(int array[] , int begin , int end){ if(begin<end){ int l = begin , r = end , x = array[begin]; while(l < r){ while(l<r && array[r]>=x) r--; if(l<r){ array[l] = array[r]; l++; } while(l<r && array[l]<x) l++; if(l<r){ array[r] = array[l]; r--; } } array[l] = array[r] = x; quickSort(array , begin , r-1); quickSort(array , r+1 , end); } }
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。