【问题描述】
在冒泡排序中,若待排序序列为正序,至需一趟扫描,而待排序序列为反序时,需进行n-1趟扫描。对于初始序列(94,10,12,18,42,44,67)只需扫描2趟,而对于初始关键字序列(12,18,42,44,67,94,10)就需扫描6趟。造成这种不对成的原因是:每趟扫描仅能使最小数据下沉一个位置,如果改变扫描方向,情况正好相反,即每趟从后往前扫描,都能使当前无序区中最大数据上浮一个位置。为了改变上述两种情况下的不对称性,可以在排序过程中交替改变扫描方向,称之为双向冒泡排序。设计双向冒泡排序算法的实现。
【输入形式】
输入数据的第一行为一个正整数 T ,表示有 T 组测试数据。
接下来T行,每行第一个整数N, 然后有N个整数,无序。0<N <= 100
【输出形式】
输出共 T 行。
每行N个整数,代表本行数据从小到大双向冒泡排序得序列。
【样例输入】
3
5 1 2 3 4 5
4 5 3 7 1
2 2 1
【样例输出】
1 2 3 4 5
1 3 5 7
1 2
分析:
1.本题是对冒泡排序的改进 对冒泡排序不是很了解的可以先去看看这道题冒泡排序中数据的交换次数
2.在对冒泡排序有一定理解后 双向冒泡排序就是从左到右再到从右到左进行冒泡排序 本质上是一样的
双向冒泡排序的函数
void doublesort(int b[],int n)
{
int i,flag,low,high;
//low high 就是冒泡排序的左右边界
low = 0;
high = n-1