

。
/*
折半插入排序
*/
#include <iostream>
#include <time.h>
using namespace std;
typedef int ElemType;
// 折半插入排序
void InsertSort(ElemType A[], int len) {
int i, j, low, high, mid;
for (i = 2; i < len; i++) {
A[0] = A[i]; // 将A[i]暂存至A[0]
low = 1;
high = i - 1;
while (low <= high) {
mid = (low + high) / 2;
if (A[mid] > A[0]) {
high = mid - 1; // 查找左半子表
} else {
low = mid + 1; // 查找右半子表
}
}
for (j = i - 1; j >= high + 1; --j) { //从最右边开始,直到让出A[high + 1]的位置
A[j + 1] = A[j]; // 元素后移
}
A[high + 1] = A[0]; // A[high + 1]为插入位置,因为在折半查找停止时,high位于low的左边一位
for (int i = 1; i < len; i++) {
cout << A[i] << ' ';
}
cout << endl;
}
}
int main() {
int len = 10;
ElemType arr[len] = {};
srand(time(NULL));
for (int i = 1; i < len; i++) {
arr[i] = rand() % 100; // 随机生成
cout << arr[i] << ' ';
}
cout << endl;
InsertSort(arr, len);
for (int i = 1; i < len; i++) {
cout << arr[i] << ' ';
}
return 0;
}