/* 直接选择排序 ref: 重温经典排序思想--C语言常用排序全解 */ void selection_sort(int n) { for (int i = 0; i < n - 1; i++) { int min = i; for (int j = i + 1; j < n; j++) { if (x[j] < x[min]) { min = j; } } if (min != i) { swap(x,i,min); } } } /* 直接插入排序 ref: 编程珠玑P110/isort3 */ void insertion_sort(int n) { for(int i = 1; i < n; i++) { int t = x[i]; int j; for (j = i; j > 0 && x[j-1] > t ; j--) { x[j] = x[j - 1]; } x[j] = t; } } /* 希尔排序 ref: 施润身ppt/第八章排序/p12 */ void shell_sort(int n) { for (int inc = n/3; inc >= 1; inc /= 3 ) { for (int i = inc; i < n; i++) { int t = x[i]; int j; for (j = i; j >= inc && x[j - inc] > t ; j -= inc) { x[j] = x[j - inc]; } x[j] = t; } } } /* 冒泡排序 ref: 数据结构C语言版p16 */ void bubble_sort(int n) { bool change = true; for (int i = n-1; i >= 1 && change; i--) { change = false; for (int j = 0; j < i; j++) { if(x[j] > x[j + 1]) { swap(x, j, j + 1); change = true; } } } } /* 快速排序 ref: 编程珠玑P112/qsort1*/ void quick_sort(int l, int u) { if (l >= u) return; int m = l; for (int i = l+1; i<= u; i++) { if(x[i] < x[l]) swap(x, ++m, i); } swap(x, l, m); quick_sort(l, m-1); quick_sort(m+1, u); } 参考: 1) http://blog.csdn.net/rerli/archive/2003/12/15/19040.aspx