快速排序
算法具体解释请参考算法导论
1 #ifndef QUICKSORT_H 2 #define QUICKSORT_H 3 4 #include <iostream> 5 6 using namespace std; 7 8 9 /************************************************* 10 Function: // quick_sort 11 Description: // 快速排序实现 12 Input: // array: 输入数组 13 // begin: 数组待排序前端元素下标 14 // end: 数组待排序末端元素下标 15 Return: // 无 16 *************************************************/ 17 18 template<class T> 19 void quick_sort(T *array, int begin, int end) 20 { 21 if(begin < end) 22 { 23 int mid = partion(array, begin, end); 24 quick_sort(array, begin, mid - 1); 25 quick_sort(array, mid + 1, end); 26 } 27 } 28 29 30 /************************************************* 31 Function: // partion 32 Description: // 将给定数组分隔成两部分 33 Input: // array: 输入数组 34 // begin: 数组待排序前端元素下标 35 // end: 数组待排序末端元素下标 36 Return: // 分隔元素下标 37 *************************************************/ 38 template<class T> 39 int partion(T *array, int begin, int end) 40 { 41 int i, j; 42 T x = array[end]; 43 i = begin - 1; 44 T temp; 45 for(j = begin; j < end; ++j) 46 { 47 if(array[j] <= x) 48 { 49 ++i; 50 temp = array[i]; 51 array[i] = array[j]; 52 array[j] = temp; 53 } 54 } 55 temp = array[end]; 56 array[end] = array[i + 1]; 57 array[i + 1] = temp; 58 return i + 1; 59 } 60 #endif 61 62 #include <iostream> 63 #include <ctime> 64 #include <random> 65 #include "quicksort.h" 66 67 using namespace std; 68 69 #define NUM 20 70 71 int main() 72 { 73 srand(time(0)); 74 int array[NUM]; 75 for(int i = 0; i < NUM; ++i) 76 { 77 array[i] = rand() % 100; 78 } 79 quick_sort<int>(array, 0, NUM - 1); 80 for (int i = 0; i < NUM; ++i) 81 { 82 cout << array[i] << " "; 83 } 84 cout << endl; 85 }