搜索
写经验 领红包
 > 设计

冒泡排序法C语言代码(冒泡排序法和选择排序法的区别)

导语:冒泡排序法

冒泡法是一种简单的排序方法,它的实现非常简单。首先对n个项目进行扫描,比较相领两个项目的大小,若发现违背大小次序则进行互换,由此可以使n个项目中的最大者换到最后。

然后对剩下的未排序好的项目再进行扫描,使它们的最大者换到表的最后。以此类推,直到将表全部排序好为止。这种排序方法,每遍扫描以后,都缩短了待排序表的长度,如果在某次扫描过程中,没有发现交换,则排序结束。

冒泡排序算法原理

1、从后往前依次比较相邻的元素。若是要按照升序排序,则后面的元素比前面的小,就交换这2个元素;降序则相反。

2、对每一对相邻元素作同样的工作,从第一对到最后一对。进行一轮比较交换下来,最后的元素就会是最小(或最大)的数了,这个数就不用参与后面的比较操作了。

3、针对所有的元素重复以上的步骤。

4、持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

为了尽量缩短待排序表的长度,避免下一次扫描中可能出现的不必要的比较,在每次扫描过程中,一方面要记录进行元素交换的次数,另一方面要记住在本次扫描中的最后一次进行交换的位置。在这个位置以后没有发生过交换,则说明在这个位置以后的元素实际上已经排好次序。

总的来说,冒泡法基本思想是重复的进行整个数组的排序,一次比较两个元素(两两排序),如果它们顺序不符合就交换,重复这样直到数列没有再需要交换的数为止(结束条件)。因为它就好像气泡一样,轻的气泡会往上漂浮,在不断漂浮的过程中,发生了两两交换过程,所以叫冒泡排序。

实例说明:

 输入:待排序表L(1:n)。

  输出:有序表L(1:n)。

  PROCEDURE LBUBSORT(L,N)

F←n

WHILE F>0 DO

{k←F-1:F←0

FOR j=1 TO k DO

{IF L(j)>L(j+1) THEN

{L(j)与L(j+1)交换:F←j}

}

}

RETURN

在这个算法中,k代表在每次扫描过程中需要进行经较的项目数;当F>0时,表示还需要进行扫描比较,并且,它的数值表示上一次扫描中发生最后一次交换的位置。由上例可知,在最坏情况下,冒泡排序法需要进行n-1遍扫描,共要作[n(n-1)]/2次比较和元素的交换。但这个工作量并不是必需的,一般情况下要小于这个工作量。

本文内容由小心整理编辑!