/**************************************************** 折半插入排序(Binary Insertion Sort): 1. 稳定的排序方法。 2. 平均来说算法的时间复杂度为O(n^2)。 3. 不适合对于数据量比较大的排序应用。 4. (减少了关键字的比较次数)速度比直接插入要快。 ****************************************************/ #include <iostream> using namespace std; void BInsertSort(int L[], int n) { for (int i = 1; i < n; ++i) { if (L[i] >= L[i - 1]) continue; int temp = L[i]; int low(0), high(i - 1); while (low <= high) { int m = (high + low) / 2; if (temp < L[m]) high = m - 1; else low = m + 1; } for (int j = i - 1; j >= high + 1; --j) L[j + 1] = L[j]; L[high + 1] = temp; } } int main() { //int L[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}; int L[10] = {0, 9, 8, 7, 6, 5, 4, 3, 2, 1}; BInsertSort(L, 10); for (int i = 0; i < 10; ++i) cout << L[i] << " "; cout << endl; }