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