1. 程式人生 > 其它 >快速排序的C++具體實現

快速排序的C++具體實現

技術標籤:C++資料結構演算法c++資料結構快速排序排序演算法

  • 剛學快速排序,寫個部落格記錄下
  1. 演算法描述:快速排序屬於交換排序的一種,是氣泡排序的改進演算法。

  2. 演算法實現:(程式碼在下面)
    例題:排序 49 38 65 97 76 12 27 50

01234567
4938659776122750

1.首先把表中第一個數作為樞軸,即49;

2.從右往左找到比這個數小的,交換這兩數的位置;

01234567
2738659776124950

3.再以這個數為基準即49,從左往右找到比他大的,交換位置;

01234567
2738499776126550

4.隨後一直重複這個過程,知道左邊的數都比49小,右邊的數都比49大,再進行第二次排序,第一趟排序結果如下:

01234567
2738124976976550

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; }
  1. 結果如下圖:
    排序結果