快速排序的C++具體實現
阿新 • • 發佈:2020-12-21
技術標籤:C++資料結構演算法c++資料結構快速排序排序演算法
- 剛學快速排序,寫個部落格記錄下
-
演算法描述:快速排序屬於交換排序的一種,是氣泡排序的改進演算法。
-
演算法實現:(程式碼在下面)
例題:排序 49 38 65 97 76 12 27 50
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|
49 | 38 | 65 | 97 | 76 | 12 | 27 | 50 |
1.首先把表中第一個數作為樞軸,即49;
2.從右往左找到比這個數小的,交換這兩數的位置;
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|
27 | 38 | 65 | 97 | 76 | 12 | 49 | 50 |
3.再以這個數為基準即49,從左往右找到比他大的,交換位置;
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|
27 | 38 | 49 | 97 | 76 | 12 | 65 | 50 |
4.隨後一直重複這個過程,知道左邊的數都比49小,右邊的數都比49大,再進行第二次排序,第一趟排序結果如下:
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 |
---|---|---|---|---|---|---|---|
27 | 38 | 12 | 49 | 76 | 97 | 65 | 50 |
5.很明顯的看出,這個快速排序的過程可以用遞迴來表示,下面是程式碼;
#include<iostream>
using namespace std;
void Quicksort(int *array, int begin, int end)
{
if (begin < end)
{
int temp = array[begin]; //先將區間的第一個數作為基準數
int i = begin; //從左到右進行查詢時的指標,指示當前左位置
int j = end; //從右到左進行查詢時的指標,指示當前右位置
while (i < j)
{
while (i<j && array[j] > temp)
j--;
array[i] = array[j];
while (i < j && array[i] <= temp)
i++;
array[j] = array[i];
}
//將基準元素填入相應位置,此時的i即為基準元素的位置
array[i] = temp;
//對基準元素的左邊子區間進行快速排序
Quicksort(array, begin, i - 1);
//對基準元素的右邊子區間進行快速排序
Quicksort(array, i + 1, end);
}
//如果區間只有一個數,則返回
else
return;
}
int main()
{
cout << "輸入需要排序的個數:";
int n;
cin >> n;
int num[30];//定義陣列容量
for (int i = 0; i < n; i++)//輸入陣列
cin >> num[i];
Quicksort(num, 0, n - 1);//呼叫函式
cout << "排序後的陣列為:" << endl;
for (int i = 0; i < n; i++)//輸出排序後陣列
cout << num[i] << ' ';
cout << endl;
system("pause");
return 0;
}
- 結果如下圖: