插入排序算法 template<class T> void InsertionSort(T a[], int n) { for (int i = 1; i < n; i++) { T t = a[i]; int j; for (j = i-1; j >= 0 && t < a[j]; j--) a[j+1] = a[j]; a[j+1] = t; } } 冒泡排序算法 template<class T> bool Bubble(T a[], int n) { bool swapped = false; for (int i = 0; i < n - 1; i++) { if (a[i] > a[i+1]) { Swap(a[i], a[i + 1]); swapped = true; swapcnt_2++; } } return swapped; } template<class T> void BubbleSort(T a[], int n) { for (int i = n; i > 1 && Bubble(a, i); i--); } 选择排序算法 template<class T> void SelectionSort(T a[], int n) { bool sorted = false; int swapcnt = 0; for (int size = n; !sorted && (size > 1); size--) { int pos = 0; sorted = true; for (int i = 1; i < size; i++) { if (a[pos] <= a[i]) pos = i; else sorted = false; } swapcnt++; Swap(a[pos], a[size - 1]); } cout << "swapcnt = " << swapcnt << endl; } 二分查找算法 template<class T> int BinarySearch(T a[], const T& x, int n) { int left = 0; int right = n - 1; while (left <= right) { int middle = (left + right)/2; if (x == a[middle]) return middle; if (x > a[middle]) left = middle + 1; else right = middle - 1; } return -1; } template<class T> int BinarySearch(T a[], const T& x, int n) { int left = 0; int right = n - 1; while (left <= right) { int middle = (left + right)/2; if (x == a[middle]) return middle; if (x > a[middle]) left = middle + 1; else right = middle - 1; } return -1; }