快速排序

来源:互联网 发布:办公室软件视频 编辑:程序博客网 时间:2024/05/08 04:33

参考高一凡《数据结构算法与解析》
(小白一枚,本文帮助理解快速排序实现方法,不深入剖析)

void QSort(int low,int high){      int m;      if(low<high){                     //attention:第一趟排序下来,序号m左边的数据都小于v[m],且未排序;右边的数据都大于v[m],且未排序      m=Partition(low,high);       //递归      QSort(low,m-1);    //对序号m左边的数据进行排序      QSort(m-1,high);//对序号m右边的数据进行排序      }}int partition(int low,int high){      int axis;      /*int temp=rand()%(high-low)+low;   //随机选择一个数作为轴        if(temp!=low) swap(temp,v[low]);       */       axis=v[low];  //选择v[low]作为轴      //确保低端(左边)数据小于轴axis,  高端(右边)数据大于轴axis    while(low<high){         while(low<high && v[high]>=axis) high--; //从数组的最右边开始查找第一个小于axis的元素         v[low]=v[high]; //直至遇到第一个小于axis,将此值移至低端         while(low<high && v[low]<=axis) low++; //从数组的最左边开始查找第一个大于axis的元素         v[high]=v[low];  //直至遇到第一个大于axis,将此值移至高端                              } //分别寻找两端下一个不满足要求的元素         v[low]=axis;  //此时low=high;将轴axis放置此处,满足左边数据小于axis,  右边数据大于axis                return low;}

这里写图片描述

原创粉丝点击