#include <iostream> #include <ctime> using namespace std; void bubbleSort(int *arr, int len) { if(arr == NULL) return; for (int i = 0; i < len; ++i) { int sorted_flag = 1; for (int j = 0; j < len - i - 1; ++j) { if(arr[j] > arr[j + 1]) { int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; sorted_flag = 0; } } if(sorted_flag == 1) break; } } void insertSort(int* arr, const int len) { if(arr == NULL) return; for (int i = 0; i < len; ++i) { int j; int temp = arr[i]; for (j = i; j > 0 ; --j) { if(arr[j-1] > temp) { arr[j] = arr[j-1]; } else { break; } } arr[j] = temp; } } void selectSort(int * arr, const int len) { if(arr == NULL) return; for (int i = 0; i < len; ++i) { int min_index = i; for (int j = i+1; j < len; ++j) { if(arr[min_index] > arr[j]) min_index = j; } int temp = arr[min_index]; arr[min_index] = arr[i]; arr[i] = temp; } } int quickSort(int * arr, int left, int right) { int l = left, r = right, key = arr[left]; while(l < r) { while(l <= r && arr[l] <= key) l ++; while(r >= l && arr[r] >= key) r --; if(l < r) { int temp = arr[l]; arr[l] = arr[r]; arr[r] = temp; } } if(l == r || r == l-1) { arr[left] = arr[r]; arr[r] = key; } return r; } void partition(int arr[], int left, int right) { if(arr == NULL || left >= right) return; int mid = quickSort(arr, left, right); partition(arr, mid + 1, right); partition(arr, left, mid - 1); } void mergeSort(int n[], int start, int end, int* temp) { if(n == NULL) return; if(start < end) { int mid = (start + end) >> 1; if(mid != start) { mergeSort(n, start, mid, temp); mergeSort(n, mid+1, end, temp); } for(int i = 0, l = start, r = mid+1; i <= end; i++) { if (r > end || l <= mid && n[l] <= n[r]) temp[i] = n[l++]; else temp[i] = n[r++]; } for (int i = start; i <= end; ++i) { n[i] = temp[i - start]; } } } void before_print(int * arr, const int len) { cout << "before sorting: "; for (int j = 0; j < len; ++j) { cout << arr[j] << ' '; } cout << endl; } void after_print(int * arr, const int len) { cout << "after sorting: "; for (int j = 0; j < len; ++j) { cout << arr[j] << ' '; } cout << endl; } int main() { srand((unsigned) time(0)); const int len = 50; const int factor = len * 5; int * arr = new int[len]; for (int j = 0; j < len; ++j) { arr[j] = rand() % factor; } before_print(arr, len); int *temp = new int[len]; mergeSort(arr, 0, len-1, temp); after_print(arr, len); return 0; }
冒泡,插入,选择,归并,快速排序的C++实现
最新推荐文章于 2024-04-23 23:57:04 发布