C++排序算法之快速排序

来源:互联网 发布:域名估价 编辑:程序博客网 时间:2024/05/18 00:52

七、快速排序,找出一个元素(理论上可以随便找一个)作为基准(pivot),然后对数组进行分区操作,使基准左边元素的值都不大于基准值,基准右边的元素值都不小于基准值,如此作为基准的元素调整到排序后的正确位置。递归快速排序,将其他n-1个元素也调整到排序后的正确位置。最后每个元素都是在排序后的正确位置,排序完成。所以快速排序算法的核心算法是分区操作,即如何调整基准的位置以及调整返回基准的最终位置以便分治递归。

<pre name="code" class="cpp">//!快速排序template<class T>void QuickSort(T* Data,int len){QuickSort(Data,0,len-1);}template<class T>void QuickSort(T* Data,int left,int right){if (left<right){int key=*(Data+left);int low=left;int high=right;while (low<high){while ((low<high)&&*(Data+high)>=key){high--;}if (low < high) {// 找到小于准基数key的元素swap(Data,low,high);low++;// low下标后移} else {// 没有找到比准基数小的元素// 说明high位置右边元素都不小于准基数break;}while ((low<high)&&*(Data+low)<=key){low++;}if (low < high) {// 找到比基准数大的元素swap(Data,high,low);high--;// high下标前移,} else{// 没有找到比基准数小的元素// 说明low位置左边元素都不大于基准数break;}}*(Data+low)=key;QuickSort(Data,left,low-1);QuickSort(Data,low+1,right);}}




0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 电脑同步车错误怎么办 无线标志没有了怎么办 电脑时间同步出错怎么办 苹果手机更新完太卡怎么办 桌面时间删除了怎么办 去泰国旅游打电话怎么办 快递短信没收到怎么办 三星s6网络差怎么办 10010被拦截了怎么办 宽带ip地址错误怎么办 出国收不到短信怎么办 电脑没有ip地址怎么办? 没有有效ip配置怎么办 手机没有短信了怎么办 验证码短信轰炸怎么办 桌面没有微信怎么办 黑到美国怎么办手机卡 饿了怎么办类似bl 老鼠偷吃玉米怎么办 狗吃葡萄了怎么办 在学校被偷拍怎么办 海尔电视媒体格式不支持怎么办 秀米链接失效怎么办 电脑显示域名解析错误怎么办 乐视pro1刷错包黑屏怎么办 任务失败文件不存在怎么办 种子密码不知道怎么办 电脑粘贴不能用怎么办 同房后吃药怀孕怎么办 微信号找不到密码怎么办 差钱找不到人怎么办 无人化时代人怎么办 穆斯林斋月饿了怎么办 羊拉屎成坨粘屁股怎么办 屁股上长猴子怎么办 恋人有隔阂应该怎么办 金色的表壳掉色怎么办 欧米茄手表不走了怎么办 手表里面生锈了怎么办 dw手表不动了怎么办 机械手表受磁怎么办