#include<iostream> #include<string> #include<vector> using namespace std; void swap(int a[], int i, int j); void insert_sort(int a[], int n) { for (int i = 1; i < n; i++) { int temp = a[i], j = i; while (j&&temp < a[j - 1]) { a[j] = a[j - 1]; j--; } a[j] = temp; } } void shell_sort(int a[], int n) { for (int inc = n / 2; inc; inc /= 2) { for (int i = inc; i < n; i++) { int temp = a[i],j=i; while (j>=inc&&temp < a[j - inc]) { a[j] = a[j - inc]; j -= inc; } a[j] = temp; } } } void select_sort(int a[], int n) { for (int i = 0; i < n; i++) { int index = i; int temp = a[i]; for (int j = i+1; j < n; j++) { if (a[j] < a[index]) { index = j; } } a[i] = a[index]; a[index] = temp; } } void bubble_sort(int a[], int n) { /* for (int i = n; i > 0; i--) { for (int j = 1; j < i; j++) { if (a[j] < a[j - 1]) { swap(a, j, j - 1); } } } */ for (int i = 0; i < n; i++) { for (int j = n - 1; j>i; j--) { if (a[j] < a[j - 1]) { swap(a, j, j - 1); } } } } void merge(int a[], int l, int m, int r) { int *temp = new int[r - l]; int i = 0, j = l, k = m; while (j < m&&k < r) { if (a[j] < a[k]) { temp[i++] = a[j++]; } else { temp[i++] = a[k++]; } } while (j != m) { temp[i++] = a[j++]; } while (k != r) { temp[i++] = a[k++]; } for (int i = l; i < r; i++) { a[i] = temp[i - l]; } delete[] temp; temp = nullptr; } void merge_sort(int a[], int l, int r) { if (l + 1 >= r) { return; } int middle = (l + r) / 2; merge_sort(a, l, middle); merge_sort(a, middle, r); merge(a, l, middle, r); } void quick_sort(int a[], int l, int r) { if (l + 1 >= r) { return; } int pivot = a[l]; int i = l, j = r; while (true) { do { i++; } while (a[i] < pivot&&i<r); do { j--; } while (a[j] >= pivot&&j > l); if (i >= j)break; swap(a, i, j); } a[l] = a[j]; a[j] = pivot; quick_sort(a, l, j); quick_sort(a, j + 1, r); } void shut_down(int a[], int hole,int n) { while (hole < n) { int firstIndex = hole * 2 + 1; if (firstIndex + 1 < n&&a[firstIndex] < a[firstIndex + 1]) { firstIndex++; } if (firstIndex < n&&a[hole] < a[firstIndex]) { swap(a, hole, firstIndex); } hole = firstIndex; } } void make_heap(int a[], int n) { for (int i = (n-1) / 2; i>=0; i--) { shut_down(a, i, n); } } void heap_sort(int a[], int n) { make_heap(a, n); for (int i = n - 1; i; i--) { swap(a, 0, i); make_heap(a, i); } } void swap(int a[], int i, int j) { int temp = a[i]; a[i] = a[j]; a[j] = temp; } void print(int a[], int n) { for (int i = 0; i < n; i++) { cout << a[i] << " "; } cout << endl; } /* int main() { int* a = new int[10]; for (int i = 0; i < 10; i++) { a[i] = rand() % 10; } print(a, 10); //insert_sort(a, 10); //shell_sort(a, 10); //select_sort(a, 10); //bubble_sort(a, 10); //merge_sort(a,0, 10); //quick_sort(a, 0, 10); //heap_sort(a, 10); //print(a, 10); } */
面试题---各种排序。插入,选择,冒泡,shell,堆,快排
原文:http://www.cnblogs.com/jinweiseu/p/5372936.html