实现一个函数模板MyBubbleSort,对教材上的冒泡排序算法进行改进,当某一趟排序没有发生交换时则不用执行下一趟。算法实现代码应填写在alg5.h的相应函数中。在每趟排序完成后,应调用alg5.h中提供的ShowRunK函数显示该趟排序的结果。 算法测试时,第一行输入待排序元素个数,第二行输入待排序的各个元素。调用MyBubbleSort输出各趟排序结果。根据要求,在以下函数中实现在数组elem中用冒泡排序进行排序。template <class ElemType> void MyBubbleSort(ElemType elem[], int n) { }
时间: 2023-06-27 18:04:45 浏览: 86
好的,我知道了,这是关于实现改进的冒泡排序算法的问题。这里是 MyBubbleSort 函数的代码实现:
```c++
template <class ElemType>
void MyBubbleSort(ElemType elem[], int n) {
bool flag = true; // 标志位,用于判断某一趟排序是否有交换
for (int i = 0; i < n - 1 && flag; ++i) {
flag = false; // 每趟排序开始前都要将标志位设置为 false
for (int j = n - 1; j > i; --j) { // 每一趟将最大元素交换到最后
if (elem[j] < elem[j - 1]) {
std::swap(elem[j], elem[j - 1]);
flag = true; // 若进行过交换,则将标志位设置为 true
}
}
ShowRunK(elem, i + 1, n); // 每趟排序结束后调用 ShowRunK 函数显示该趟排序结果
}
}
```
这里使用了一个 `flag` 标志位,用于判断当前趟排序是否有数字交换。若没有,则说明已经排好序,不用再进行后续的排序操作。在每趟排序结束后,调用 `ShowRunK` 函数显示该趟排序结果。
阅读全文