• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

C/C++实现快速排序(两种方式)图文详解

c++ 搞代码 4年前 (2022-01-06) 22次浏览 已收录 0个评论
文章目录[隐藏]

这篇文章主要介绍了C/C++实现快速排序的方法,这几天在找工作,被问到快速排序,结果想不出来快速排序怎么弄的;回来搜索了一下,现在记录下来,方便以后查看

介绍

快速排序是对冒泡排序算法的一种改进,快速排序算法通过多次比较和交换来实现排序。

流程如下:

 

实现

以下有两种实现方式,说是两种,其实就是在交换元素时具体细节上有点不同罢了。

方式一

 int Partition(int A[],int low,int high){ int pivot=A[low];//第一个元素作为基准 while(low<high){ while(low=pivot) high--; A[low]=A[high]; while(low<high && a[low]<=pivot) low++; a[high]=A[low]; } a[low]=pivot; return low; void quicksort(int a[],int low,int high){ if(low<high){ int pivotpos=Partition(A,low,high); quicksort(a,low,pivotpos-1); quicksort(a,pivotpos+1,high); <pre></div><p>该方式,先把基准元素保存起来<br /></p><p>如下图数组,把49看作基准元素,先移动high指针,当指向27时退出while循环,把27放到low位置<br /></p><p style="text-align: center"><br /></p><p style="text-align: center"><br /></p><p>这时候,high位置就空出来一个,那么让low移动,移动到下图所示时,65>49,退出while循环,再将65放到high位置<br /></p><p style="text-align: center"><br /></p><p>这样low这个位置又空出来了,再移动high,如此反复。<i style="color:transparent">来源gaodai$ma#com搞$代*码网</i><br /></p><p style="text-align: center"><br /></p><p>最后得到如下图的情况:<br /></p><p style="text-align: center"><br /></p><p>这样我们就按照“49”,把数组分为了左右两部分。<br /></p><p>对左右两部分分别进行上述操作即可。<br /></p><p style="text-align: center"></p><p class="maodian"></p><h3><mark></mark>方式二</h3><div class="gaodaimacode"><pre class="prettyprint linenums"> void Quick_sort(int left,int right,int arr[]){ if(left>=right)return; int i,j,base,temp; i=left,j=right; base=arr[left]; while(i=base && i<j)j--; while(arr[i]<=base && i<j)i++; if(i<j){ temp=arr[i]; arr[i]=arr[j]; arr[j]=temp; } } arr[left]=arr[i]; arr[i]=base; Quick_sort(left,i-1,arr); Quick_sort(i+1,right,arr); } 

对于第二种方式,看下图即可很好理解。

高低指针不是轮流替换空余位置,而是同时找到不符合的元素,然后交换二者。

最后,高低指针相遇,再把基准元素与相遇位置上的元素交换即可。

总结

本篇文章就到这里了,希望能给你带来帮助,也希望您能够多多关注gaodaima搞代码网的更多内容!

以上就是C/C++实现快速排序(两种方式)图文详解的详细内容,更多请关注gaodaima搞代码网其它相关文章!


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:C/C++实现快速排序(两种方式)图文详解

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址