全文预览

快速排序

上传者:火锅鸡 |  格式:docx  |  页数:6 |  大小:0KB

文档介绍
i < j && s[j] >= x) // 从右向左找第一个小于x的数                  j--;                if(i < j)                   s[i++] = s[j];                            while(i < j && s[i] < x) // 从左向右找第一个大于等于x的数                  i++;                if(i < j)                   s[j--] = s[i];          }          s[i] = x;          quick_sort(s, l, i - 1); // 递归调用           quick_sort(s, i + 1, r);      }  }  //快速排序voidquick_sort(ints[],intl,intr){if(l<r){ //Swap(s[l],s[(l+r)/2]);//将中间的这个数和第一个数交换参见注1inti=l,j=r,x=s[l];while(i<j){while(i<j&&s[j]>=x)//从右向左找第一个小于x的数 j--;if(i<j) s[i++]=s[j]; while(i<j&&s[i]<x)//从左向右找第一个大于等于x的数 i++;if(i<j) s[j--]=s[i];}s[i]=x;quick_sort(s,l,i-1);//递归调用quick_sort(s,i+1,r);}}快速排序还有很多改进版本,如随机选择基准数,区间内数据较少时直接用另的方法排序以减小递归深度。有兴趣的筒子可以再深入的研究下。 注1,有的书上是以中间的数作为基准数的,要实现这个方便非常方便,直接将中间的数和第一个数进行交换就可以了。

收藏

分享

举报
下载此文档