快速排序的主要的思想就是在於劃分,就是先找一個關索引值,然後運用什麼樣的方法把資料分成小於關索引值的在關鍵的左邊,
而大於關索引值的在關索引值的右邊. 然後分配好了之後就可以直接遞迴調用了.
貼出我自己寫的代碼,這是根據資料結構的基本思想寫出來的:
#include <stdio.h>#include <string.h>#include <math.h>#include <iostream>#include <algorithm>#include <string>using namespace std;int N;int a[10000];void Quick_Sort (int low, int high){if (low < high) //這個注意一定要寫上,因為如果沒有這個條件的話,將會出現無限迴圈的情況 {int i = low; // 這是兩個動態指標 int j = high;int pivot = a[low]; // 將這個關鍵之存到pivot裡面 int pos = low; //這個指標是指向空缺的可以插入的位置上 while (i < j){while (a[j] > pivot){j--;}a[pos] = a[j];a[j] = pivot;pos = j;while (a[i] < pivot){i++;}a[pos] = a[i];a[i] = pivot;pos = i;}Quick_Sort (low, pos - 1); // 這是遞迴調用演算法 Quick_Sort (pos + 1, high);}}int main(){cout << "Input the number that you want be sorted : " << endl;cin >> N;cout << "Please input the numbers : " << endl;for (int i = 0; i < N; i++){cin >> a[i];}Quick_Sort (0, N - 1);for (int i = 0; i < N; i++){cout << a[i] << " ";}cout << endl;system ("pause");return 0;}