用冒泡排序法对数据列31,17,34,4,22,18,29,1进行从小到大排序,经过三趟排序后得到的数据列是___能简单地说一下什么事【冒泡排序法】吗?

问题描述:

用冒泡排序法对数据列31,17,34,4,22,18,29,1进行从小到大排序,经过三趟排序后得到的数据列是___
能简单地说一下什么事【冒泡排序法】吗?

冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复以上过程,仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到最大数前的一对相邻数,将小数放前,大数放后,第二趟结束,在倒数第二个数中得到一个新的最大数。如此下去,直至最终完成排序。
算法示例
49 13 13 13 13 13 13 13
38 49 27 27 27 27 27 27
65 38 49 38 38 38 38 38
97 65 38 49 49 49 49 49
76 97 65 49 49 49 49 49
13 76 97 65 65 65 65 65
27 27 76 97 76 76 76 76
49 49 49 76 97 97 97 97
我自己边的一个算法:
bubblesort(int x[],int n)
{
int i,j,flag,swap;
flag=1;
for(i=0;i{
for(j=0;jif(x[j]>x[j+1])
{
flag=1;
swap=x[j];
x[j]=x[j+1];
x[j+1]=swap;
}
if(flag==0) return 0;
}
}

目的
按要求从大到小或从小到大排序。
基本思路
对尚未排序的各元素从头到尾依次比较相邻的两个元素是否逆序(与欲排顺序相反),若逆序就交换这两元素,经过第一轮比较排序后便可把最大(或最小)的元素排好,然后再用同样的方法把剩下的元素逐个进行比较,就得到了你所要的顺序。可以看出如果有 n 个元素,那么一共要进行 n-1 轮比较,第 i 轮要进行 j=n-i 次比较。(如:有5个元素,则要进行5-1轮比较。第3轮则要进行5-3次比较)经过优化后的算法根据不同的情况有可能减小排序的次数。

就是通过逐次比较相邻的两个数据的大小来完成.原则是从左到右比较两个相邻的数比较一次游标向前移动一位(比较结果如果前当前位置的数据大于相邻数据则交换),由于每次都会此次比较的最大数据显示到最后.程序如下:i...