面試常考排序演算法
阿新 • • 發佈:2018-12-17
#include<iostream> #include<algorithm> using namespace std; //快排(最好結果是nlogn,最壞情況是n*n) void QuickSort(int arr[], int L, int R) { int pivot = arr[(L + R) / 2]; int i = L; int j = R; while (i <= j) { while (arr[i] < pivot) { i++; } while (arr[j] > pivot) { j--; } if (i <= j) { swap(arr[i], arr[j]); i++; j--; } } if (i < R) { QuickSort(arr, i, R); } if (j > L) { QuickSort(arr, L, j); } } //插入排序(最好結果是n,最壞情況是n*n) void InsertSort(int arr[],int len) { for (int i = 1; i < len; i++) { int key = arr[i]; while (arr[i - 1] > key) { arr[i] = arr[i - 1]; i--; if (i == 0) { break; } } arr[i] = key; } } //選擇排序(最好結果是n*n,最壞情況是n*n) void SelectSort(int arr[], int len) { for (int i = len; i>=1; i--) { int max = arr[0]; int pos = 0; for (int j = 0; j < i; j++) { if (arr[j] >= max) { max = arr[j]; pos = j; } } swap(arr[pos], arr[i-1]); } } //氣泡排序(最好結果是n,最壞情況是n*n) void BubbleSort(int arr[], int len) { for (int i = 0; i < len; i++) { for (int j = 1; j < len; j++) { if (arr[j - 1] > arr[j]) { swap(arr[j - 1], arr[j]); } } } } int main() { int arr[9] = { 5,2,9,10,3,0,4,1,100 }; QuickSort(arr, 0, 8); InsertSort(arr, 9); SelectSort(arr, 9); BubbleSort(arr, 9); for (auto c : arr) { cout << c << " "; } cout << endl; return 0; }