剑指offer 快速排序

来源:互联网 发布:家族信托 知乎 编辑:程序博客网 时间:2024/03/29 12:52
void swap(int* a,int* b){int tmp=a;a=b;b=tmp;}//在给定的[start,end]区间内随机取一个值,分成大于它和小于它的两拨//返回选定值在分完拨之后的下标 int partition(int data[],int len,int start,int end){if(data==NULL||len<=0||start<0||end>len)throw exception("invalid parameter.");//随机取一个区间内值,并将其换到区间最末尾 int index=Random(start,end);swap(&data[index],&data[end]);int small=start-1;for(i=start;i<end;++i){if(data[i]<data[end]){//small++后代表大于选定值的第一个数的下标//如果不存在大于选定值的数字则代表当前比较的数字下标 ++small; if(small<i){//交换后small代表小于选定值的最后一个数字的下标 swap(&data[small],&data[i])}}}//small++后代表大于选定值的第一个数的下标++small;swap(&data[small],&data[end]);return small;}void QuickSort(int data[],int len,int start,int end){//递归结束条件if(start==end) return;int index=partition(data,len,start,end);if(index>start){QuickSort(data,len,start,index-1);}if(index<end){QuickSort(data,len,index+1,end);}}


0 0
原创粉丝点击