实现一个函数模板BInsertSort,实现折半插入排序算法。算法实现代码应填写在alg4.h的相应函数中。在每趟排序完成后,应调用alg4.h中提供的ShowRunK函数显示该趟排序的结果。算法测试时,第一行输入待排序元素个数,第二行输入待排序的各个元素。调用BInsertSort输出各趟排序结果。根据要求,补全以下代码。template<class ElemType> void ShowRunK(ElemType elem[], int n, int k) // 操作结果: 显示数组elem的各数据元素值 { cout << "第" << setw(2) << k << "趟排序结果:"; for (int i = 0; i < n; i++) { cout << setw(2) << elem[i] << " "; } cout << endl; } template <class ElemType> void BInsertSort(ElemType elem[], int n) // 操作结果: 实现折半插入排序{}
时间: 2023-07-15 17:12:11 浏览: 101
```cpp
template<class ElemType>
void ShowRunK(ElemType elem[], int n, int k)
// 操作结果: 显示数组elem的各数据元素值
{
cout << "第" << setw(2) << k << "趟排序结果:";
for (int i = 0; i < n; i++) {
cout << setw(2) << elem[i] << " ";
}
cout << endl;
}
template <class ElemType>
void BInsertSort(ElemType elem[], int n)
// 操作结果: 实现折半插入排序
{
for (int i = 1; i < n; i++) {
int low = 0, high = i - 1;
ElemType temp = elem[i];
while (low <= high) {
int mid = (low + high) / 2;
if (elem[mid] > temp) {
high = mid - 1;
} else {
low = mid + 1;
}
}
for (int j = i - 1; j >= high + 1; j--) {
elem[j + 1] = elem[j];
}
elem[high + 1] = temp;
ShowRunK(elem, i + 1, i);
}
}
```
阅读全文