设要排序的数组是r[ ],首先选取第一个元素,即r[low]作为基准数据,也就是枢轴,然后将所有比它小的数都放到它左边,所有比它大的数都放到它右边,这个过程称为一趟快速排序。
具体过程为:
1)设置两个变量low、high分别指向第一个元素和最后一个元素;
2)每次都是将该数组第一个元素作为基准数据,赋值给pivot(枢轴),即pivot = r[low];
3)从high开始从后向前进行对比,当r[high] < pivot时,将r[high]赋值给r[low],然后再从low开始,从前往后进行对比,当r[low] > pivot时,将r[low]赋值给r[high],然后再从high开始从后向前对比,如此往复,知道low = high,此事就完成了一趟快速排序。
代码实现// 一趟快速排序 int QuickSort (int r[], int low, int high) { int pivot = r[low]; //将第一个元素作为枢轴 while (low < high) { //用low、high作为循环结束的判断标志,以搜索枢轴的最终位置 while (low < high && r[high] >= pivot) //当high处的元素大于或等于枢轴 --high; //high向前移动,继续进行对比 r[low] = r[high]; //当high处的元素小于枢轴,则该元素移动到左端,即low所处位置 while (low < high && r[low] <= pivot) //当low处的元素小于或等于枢轴 ++low; //low向后移动,继续进行对比 r[high] = r[low]; //当low处的元素大于枢轴,则该元素移动到右端,即high所处位置 } r[low] = pivot; //当循环结束时,low所处位置即为枢轴元素存放的最终位置 return low; //返回存放枢轴的最终位置 }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)