快速排序(分治法)
阿新 • • 發佈:2018-01-28
ios type font nbsp def 註意 class 裏的 span
問題描述參考:http://blog.csdn.net/code_ac/article/details/74158681
算法實現部分:
//random_quick_sort.cpp #include "random_quick_sort.h" #include <stdlib.h> template<class Type> void RandomQuickSort(Type a[], int p, int r) { if (p < r) { int q = random_partition(a, p, r); RandomQuickSort(a, p, q- 1); RandomQuickSort(a, q + 1, r); } } //隨機產生基準數 template <class Type> int random_partition(Type a[], int p, int r) { int i = rand() % (r - p) + p; Type b; b = a[p]; a[p] = a[i]; a[i] = b; return partition(a, p, r); } //根據基準元素進行排序 template <classType> int partition(Type a[], int p, int r) { int i = p, j = r + 1; Type b; Type x = a[p]; //以a[p]作為基準元素 while (true) { while (a[++i] < x && i < r); while (a[--j] > x); if (i >= j) break; b = a[j]; a[j]= a[i]; a[i] = b; } a[p] = a[j]; a[j] = x; return j; }
頭文件:
//random_quick_sort.h #ifndef RANDOM_QUICK_SORT_H #define RANDOM_QUICK_SORT_H template <class Type> void RandomQuickSort(Type a[], int p, int r); #endif
主函數:
//main.cpp #include<iostream> #include "random_quick_sort.cpp" using namespace std; #define Type int //定義數組元素類型 int main() { int size; //數組大小 cout << "請輸入數組大小: "; cin >> size; Type *a = new Type[size]; //定義一個數組 cout << "請輸入數組元素: " << endl; for (int i = 0; i < size; i++) { cin >> a[i]; } RandomQuickSort(a, 0, size - 1); cout << "輸出快速排序後的數組:" << endl; for (int j = 0; j < size; j++) { cout << a[j] << " "; } system("pause"); delete a; return 0; }
註意:這裏的基準數是隨機產生的,從而期望劃分是較為對稱的;
快速排序(分治法)