排序算法之再总结

来源:互联网 发布:优化教育结构 编辑:程序博客网 时间:2024/05/29 18:29

马上找工作了,在写一遍经典的排序算法

//the summary of sort by suqiang#include <iostream>#include <vector>using namespace  std;void swap(int &x, int &y){int temp = x;x = y;y = temp;}//Select Sort,O(n*n)void selectSort(int arr[], int n){int min_idx;for (int i = 0; i < n; i++){min_idx = i;for (int j = i; j < n; j++){if (arr[j] < arr[i]){min_idx = j;}}swap(arr[i], arr[min_idx]);}}//Bubble Sortvoid bubbleSort(int arr[], int n){for (int i = 0; i < n; i++){for (int j = 0; j < n - i - 1; j++){if (arr[j] > arr[j + 1]){swap(arr[j], arr[j + 1]);}}}}//Bubble Sort with flag,a optimized version of Bubble sortvoid bubbleSort2(int arr[], int n){for (int i = 0; i < n;i++){bool swapped = false;for (int j = 0; j < n - 1 - i; j++){if (arr[j] > arr[j + 1]){swap(arr[j], arr[j + 1]);swapped = true;}}if (swapped == false){return;}}}// insert sortvoid insertSort(int arr[], int n){int i, j, k;for (int i = 1; i < n; i++){k = arr[i];j = i - 1;while (j >= 0 && arr[j]>k){arr[j + 1] = arr[j];j--;}arr[j + 1] = k;}}//insert sort by binary searchint binarySearch(int a[], int item, int low, int high){if (high <= low){return item > a[low] ? low + 1 : low;}int mid = (high + low) / 2;if (item == a[mid]){return mid + 1;}if (item > a[mid]){return binarySearch(a, item, mid + 1, high);}return binarySearch(a, item, low, mid - 1);}void insertSort2(int arr[], int n){int i, loc, j, k, selected;for (int i = 1; i < n; i++){j = i - 1;selected = arr[i];loc = binarySearch(arr, selected, 0, j);while (j>=loc){arr[j + 1] = arr[j];j--;}arr[j + 1] = selected;}}//merge sort void merge(int arr[], int l, int m, int r){int i, j, k;int n1 = m - l + 1;int n2 = r - m;int *L = new int[n1];int *R = new int[n2];for (int i = 0; i < n1;i++){L[i] = arr[l + i];}for (int i = 0; i < n2;i++){R[i] = arr[m + 1 + i];}i = 0;j = 0;k = l;while (i<n1&&j<n2){if (L[i] <= R[j]){arr[k] = L[i];i++;}else{arr[k] = R[j];j++;}}while (i < n1){arr[k] = L[i];k++;i++;}while (j<n2){arr[k] = R[j];j++;k++;}delete L;delete R;}void mergeSort(int arr[], int l, int r){if (l < r){int m = l + (r - l) / 2;mergeSort(arr, l, m);mergeSort(arr, m + 1, r);merge(arr, l, m, r);}}


原创粉丝点击