C++快速排序


快速排序即是在一组数据中任取一个数作为基准数,将大于这个数的数放在这个数的右边,将小于这个数的数放在这个数的左边,指针 ij 从数组的左右两端移动,i 从左向右,j 从右向左。假设以数组中间的那个数作为基准数 x ,则 i 先向右移动,直到移动到一个大于 x 的数停下来,然后 j 开始向左移动,直到移动到一个小于 x 的数停下来,此时只要 ij 所在地方的数互换位置即可达成大数在右小数在左的效果。此轮交换过后 ij 继续重复刚才的指令,直到 ij 相遇,第一轮结束。此时以 x 为分界点,x 左边的数都小于 xx 右边的数都大于 x。再将 x 左边和右边分别看做两组数继续重复上述步骤,最终即可将所有数都从小到大排序。

代码如下:

 //此行为空白行

 

 1 #include <iostream>
 2 
 3 using namespace std;
 4 
 5 const int N=100000;
 6 int q[N];
 7 void quick_sort(int q[],int l,int r)
 8 {
 9     int i=l-1,j=r+1;
10     int x=q[(l+r)/2];
11     if(l>=r)return;
12     while(i<j)
13     {
14         do i++;while(q[i]<x);
15         do j--;while(q[j]>x);
16         if(i<j)swap(q[i],q[j]);
17     }
18     quick_sort(q,l,j);
19     quick_sort(q,j+1,r);
20 }
21 int main()
22 {
23     int n;
24     cin>>n;
25     for(int i=0;i<n;i++)cin>>q[i];
26     quick_sort(q,0,n-1);
27     for(int i=0;i<n;i++)cout<<q[i]<<" ";
28     return 0;
29 }

(刚开始学习算法,代码运行过没有问题,但解释的可能会有不对的地方,欢迎大佬指正!)


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM