歡迎您光臨本站 註冊首頁

C++實現快速排序(Quicksort)算法

←手機掃碼閱讀     火星人 @ 2020-04-28 , reply:0

本文實例為大家分享了C++快速排序算法,供大家參考,具體內容如下

一、基本思想是:

通過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的所有數據都比另外一部分的所有數據都要小,然後再按此方法對這兩部分數據分別進行快速排序,整個排序過程可以遞歸進行,以此達到整個數據變成有序序列。

二、方法1實現程序:左右兩個方向掃描

// 快速排序:選第一個對象作為基準,按照該對象的排序碼大小,將整個對象 // 序列劃分為左右兩個字序列: // 左側子序列中所有對象的排序碼都小於或等於基準對象的排序碼; // 右側子序列中所有對象的排序碼都大於基準對象的排序碼; // 基準對象則排在這兩個子序列中間,這也是該對象最終應放的位置 // 然後分別對這兩個子序列重複施行上述方法,直到所有的對象都排在相應位置上為止 #include

// 一次快速排序算法 int quickPass(int arr[], int low, int high) { int down, up, temp; down = low; up = high; temp = arr[low]; while(down < up) { while((down < up) && arr[up] >= temp) // 從右向左掃描 up--; if(down < up) arr[down++] = arr[up]; // 在被騰空出來的單元(由down指向)中填入arr[up] while((down < up) && arr[down] < temp) // 從左向右掃描 down++; if(down < up) arr[up--] = arr[down]; // 在被騰空出來的單元(由up指向)中填入arr[down] } arr[down] = temp; // 最後把基準插回到數組中間去 return down; } // 快速排序算法 void quickSort(int arr[], int low, int high) { // 對序列arr[low]到arr[high]作快速排序 int mid; if(low < high) { mid = quickPass(arr, low, high); // 對序列arr[low]到arr[high]作一趟快速排序 quickSort(arr, low, mid-1); // 對左半部分作遞歸處理 quickSort(arr, mid+1, high); // 對右半部分作遞歸處理 } } int main(int argc, const char * argv[]) { // insert code here... int len, i; int arr[] = {40, 30, 60, 90, 70, 10, 20, 40}; len = sizeof(arr) / sizeof(arr[0]); std::cout << "排序前:

"; for(i = 0; i < len; i++) std::cout << arr[i] << " "; std::cout << std::endl; quickSort(arr, 0, len-1); // 調用快速排序法 std::cout << "排序後:

"; for(i = 0; i < len; i++) std::cout << arr[i] << " "; std::cout << std::endl; return 0; }

運行結果:

三、方法2:只往一邊掃描

// 快速排序的另一種方法:只往一邊掃描 #include// 交換兩個數 void Exchange(int &a, int &b) { int temp; temp = a; a = b; b = temp; } // 將序列分為左右兩部分,左部分較小,右部分較大 int Partition(int arr[], int low, int high) { int x, i, j; x = arr[high]; // 以high位置的數作為基準 i = low - 1; // 進行數據分類:左部分較小,右部分較大 for(j = low; j < high; j++) if(arr[j] <= x) { // 往右掃描找小於或者等於基準的數 i = i + 1; Exchange(arr[i], arr[j]); // 交換 } Exchange(arr[i+1], arr[high]); // 把基準放到中間 return i+1; } // 快速排序算法 void quickSort(int arr[], int low, int high) { int q; if(low < high) { q = Partition(arr, low, high); quickSort(arr, low, q-1); quickSort(arr, q+1, high); } } int main(int argc, const char * argv[]) { int len, i; int arr[] = {40, 30, 60, 90, 70, 10, 20, 40}; len = sizeof(arr) / sizeof(arr[0]); std::cout << "排序前:

"; for(i = 0; i < len; i++) std::cout << arr[i] << " "; std::cout << std::endl; quickSort(arr, 0, len-1); // 調用快速排序法 std::cout << "排序後:

"; for(i = 0; i < len; i++) std::cout << arr[i] << " "; std::cout << std::endl; return 0; }



[火星人 ] C++實現快速排序(Quicksort)算法已經有265次圍觀

http://coctec.com/docs/c/language/show-post-232001.html