閘道器+BFF模式(Backend For Frontend前端應用開發的後端服務)
阿新 • • 發佈:2021-10-21
快速排序即是在一組資料中任取一個數作為基準數,將大於這個數的數放在這個數的右邊,將小於這個數的數放在這個數的左邊,指標 i 和 j 從陣列的左右兩端移動,i 從左向右,j 從右向左。假設以陣列中間的那個數作為基準數 x ,則 i 先向右移動,直到移動到一個大於 x 的數停下來,然後 j 開始向左移動,直到移動到一個小於 x 的數停下來,此時只要 i 和 j 所在地方的數互換位置即可達成大數在右小數在左的效果。此輪交換過後 i 和 j 繼續重複剛才的指令,直到 i 和 j 相遇,第一輪結束。此時以 x 為分界點,x 左邊的數都小於 x,x 右邊的數都大於 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 }
(剛開始學習演算法,程式碼執行過沒有問題,但解釋的可能會有不對的地方,歡迎大佬指正!)