標籤:
#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,堆,快排