(C/C++) 基本排序法
C++ Class 宣告
1 class Sort{ 2 private: 3 void Merge(int *arr, int front, int mid, int end); 4 int Partition(int *arr, int front, int end); 5 public: 6 void BubblesSort(int *arr, int size); 7 void InsertSort(int *arr, int size); 8 void MergeSort(int *arr, int front, int end); 9 void QuickSort(int *arr, int front, int end); 10 };
排序法實現
1 int Sort::Partition(int *arr, int front, int end){ 2 int pivot = arr[end]; 3 int i = front; 4 for(int j = front; j < end; j++){ 5 if(arr[j] < pivot){ 6 swap(arr[j], arr[i]); 7 i++; 8 } 9 } 10 swap(arr[i], arr[end]); 11 return i; 12 } 13 14 void Sort::QuickSort(int *arr, int front, int end){ 15 if(front < end){ 16 int pivot = Partition(arr, front, end); 17 QuickSort(arr, front, pivot - 1); 18 QuickSort(arr, pivot + 1, end); 19 } 20 } 21 22 void Sort::BubblesSort(int *arr, int size){ 23 int len = size; 24 for(int i = 0; i < len; i++){ 25 for(int j = i + 1; j < len; j++){ 26 if(arr[j] < arr[i]) 27 swap(arr[i], arr[j]); 28 } 29 } 30 } 31 32 void Sort::InsertSort(int *arr, int size) 33 { 34 int len = size; 35 int insert = 0; 36 for(int i = 1; i < len; i++){ 37 insert = arr[i]; 38 for(int j = i - 1; j >= 0; j--){ 39 if(insert < arr[j]) 40 arr[j + 1] = arr[j]; 41 else 42 break; 43 } 44 } 45 } 46 47 void Sort::Merge(int *arr, int front, int mid, int end){ 48 int i, j, k; 49 int n1 = mid - front + 1; 50 int n2 = end - mid; 51 int LeftSub[n1]; 52 int RightSub[n2]; 53 54 /* copy array */ 55 for(i = 0; i < n1; i++) 56 LeftSub[i] = arr[front + i]; 57 for(i = 0; i < n2; i++) 58 RightSub[i] = arr[mid + i + 1]; 59 60 i = 0; j = 0; k = front; 61 while(i < n1 && j < n2){ 62 if(LeftSub[i] <= RightSub[j]){ 63 arr[k] = LeftSub[i]; 64 i++; 65 }else{ 66 arr[k] = RightSub[j]; 67 j++; 68 } 69 k++; 70 } 71 while(i < n1){ 72 arr[k] = LeftSub[i]; 73 i++; k++; 74 } 75 while(j < n2){ 76 arr[k] = RightSub[j]; 77 j++; k++; 78 } 79 } 80 81 82 void Sort::MergeSort(int *arr, int front, int end){ 83 if(front < end){ 84 int mid = (front + end) / 2; 85 MergeSort(arr, front, mid); 86 MergeSort(arr, mid + 1, end); 87 Merge(arr, front, mid, end); 88 } 89 } 90 91 92 void swap(int *a, int *b){ 93 int temp; 94 temp = *a; 95 *a = *b; 96 *b = temp; 97 }