五种排序算法
#include <iostream> using namespace std; int a[]={3, 2, 5, 1, 4, -3, 24, 7}; int *p = new int[8]; void bubble_sort(int n) { for (int i = 0; i < n; i++) { for (int j = 1; j < n - i; j++) { if (a[j - 1] > a[j]) { int tmp = a[j - 1]; a[j - 1] = a[j]; a[j] = tmp; } } } } void select_sort(int n) { for (int i = 0; i < n; i++) { int min = i; for (int j = i + 1; j < n; j++) { if (a[j] < a[min]) { min = j; } } if (min != i) { int tmp = a[min]; a[min] = a[i]; a[i] = tmp; } } } void insert_sort(int n) { int i, j; for (i = 1; i < n; i++) { int k = a[i]; for (j = i; j > 0 && k < a[j - 1]; j--) { a[j] = a[j - 1]; } a[j] = k; } } void quick_sort1(int l,int r) { int i = l, j = r, x = a[(i + j) / 2]; do { while (x > a[i]) i++; while (x < a[j]) j--; if (i <= j) { int t = a[i]; a[i] = a[j]; a[j] = t; i++; j--; } } while(i <= j); if (i < r) quick_sort1(i,r); if (l < j) quick_sort1(l,j); } void quick_sort2(int l, int r) { if (l < r) { int i = l, j = r; int x = a[l]; while (i < j) { while (i < j && a[j] >= x) j--; if (i < j) a[i++] = a[j]; while (i < j && a[i] < x) i++; if (i < j) a[j--] = a[i]; } a[i] = x;//i = j quick_sort2(l, i - 1); quick_sort2(i + 1, r); } } void merge(int first, int mid, int last) { int i = first, m = mid; int j = mid + 1, n = last; int k = 0; while(i <= m && j <= n) { if (a[i] <= a[j]) { p[k++] = a[i++]; } else { p[k++] = a[j++]; } } while (i <= m) p[k++] = a[i++]; while (j <= n) p[k++] = a[j++]; for (i = 0; i < k; i++) { a[first + i] = p[i]; } } void merge_sort(int first, int last) { if (first < last) { int mid = (first + last) / 2; merge_sort(first, mid); merge_sort(mid + 1, last); merge(first, mid, last); } } int main() { // bubble_sort(8); // select_sort(8); // insert_sort(8); // quick_sort1(0, 7); // quick_sort2(0, 7); merge_sort(0, 7); for (int i = 0; i < 8; i++) { cout << a[i] << " "; } delete []p; return 0; }
冒泡排序、选择排序、插入排序、快速排序、归并排序。晚点再总结。

浙公网安备 33010602011771号