双向冒泡排序先后往前再从前往后c++实现
时间: 2024-09-10 13:21:26 浏览: 24
双向冒泡排序是一种改进的冒泡排序算法,它先从前往后冒泡,再从后往前冒泡,以此类推,直到排序完成。以下是C++实现双向冒泡排序的示例代码:
```
#include<iostream>
using namespace std;
int main() {
int a[100], i, n;
cin >> n;
for (i = 0; i < n; i++)
cin >> a[i];
int low, high, lastSwapPos, temp, cnt;
low = 0;
high = n - 1;
while (low < high) {
lastSwapPos = high; //设置未排序序列的最后一个元素位置
for (i = low; i < lastSwapPos; i++) {
cnt++;
if (a[i] > a[i + 1]) {
temp = a[i];
a[i] = a[i + 1];
a[i + 1] = temp;
high = i; //记录交换位置
}
}
if (lastSwapPos == high) //若未进行交换操作,说明排序已经完成
break;
lastSwapPos = low; //设置未排序序列的第一个元素位置
for (i = high; i > lastSwapPos; i--) {
if (a[i] < a[i - 1]) {
temp = a[i];
a[i] = a[i - 1];
a[i - 1] = temp;
low = i; //记录交换位置
}
}
if (lastSwapPos == low) //若未进行交换操作,说明排序已经完成
break;
}
for (i = 0; i < n; i++)
cout << a[i] << " ";
cout << endl;
return 0;
}
```
其中,low和high分别表示未排序序列的第一个元素位置和最后一个元素位置,lastSwapPos表示未排序序列的最后一个元素位置,temp表示交换时的临时变量,cnt表示比较次数。在代码中,先从前往后冒泡,再从后往前冒泡,直到排序完成。最后输出排序后的结果。