冒泡排序

冒泡排序(Bubble Sort)是一种简单的排序算法,由于它的简洁,冒泡排序通常被用来对于程序设计入门的学生介绍算法的概念。冒泡排序的思想是重复地走访过要排序的数列,一次比较两个相邻的元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行到没有元素需要交换,也就是说该数列已经排序完成。算分名字的由来是因为越小的元素会经过交换慢慢的“浮”到数列的顶端。


冒泡排序算法基本步骤(升序):

1.比较相邻的元素。如果第一个比第二大,则交换二者。

2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。此步完成后,最后的元素就是最大的数。

3.针对所有的元素重复以上的步骤,除了最后一个。

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


冒牌排序演示图:


代码实现:

C语言代码:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 #define N 10
 5 
 6 int main()
 7 {
 8     int i, j, temp;
 9     int arr[N] = {36, 58, 12, 59, 65, 96, 39, 68, 24, 86};
10     for(i=0; i<N-1; i++) {
11         for(j=0; j<N-1-i; j++) {
12             if(arr[j] > arr[j+1]) {
13                 temp = arr[j];
14                 arr[j] = arr[j+1];
15                 arr[j+1] = temp;
16             }
17         }
18     }
19     for(i=0; i<N; i++) {
20         printf("%-3d", arr[i]);
21     }
22     printf("\n");
23     return 0;
24 }

 Java代码:

 1 public class BubbleSort {
 2     
 3     public static void main(String[] args) {
 4         
 5         int temp = 0;
 6         int arr[] = {36, 58, 12, 59, 65, 96, 39, 68, 24, 86};
 7         
 8         for(int i=0; i<arr.length-1; i++) {
 9             for(int j=0; j<arr.length-1-i; j++) {
10                 if(arr[j] > arr[j+1]) {
11                     temp = arr[j];
12                     arr[j] = arr[j+1];
13                     arr[j+1] = temp;
14                 }
15             }
16         }
17         
18         for(int i=0; i<arr.length; i++) {
19             System.out.print(arr[i]+ " ");
20         }        
21     }
22 }

算法优化:增加有序标志,内层循环比较一次完成,若未发生交换,则已有序,排序结束。

C语言代码:

 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 
 4 #define N 10
 5 
 6 int main()
 7 {
 8     int i, j, temp, isSorted;
 9     int arr[N] = {36, 58, 12, 59, 65, 96, 39, 68, 24, 86};
10     for(i=0; i<N-1; i++) {
11         isSorted = 1;
12         for(j=0; j<N-1-i; j++) {
13             if(arr[j] > arr[j+1]) {
14                 temp = arr[j];
15                 arr[j] = arr[j+1];
16                 arr[j+1] = temp;
17                 isSorted = 0;
18             }
19         }
20         if(isSorted){
21             break;
22         }
23     }
24     for(i=0; i<N; i++) {
25         printf("%-3d", arr[i]);
26     }
27     printf("\n");
28     return 0;
29 }

Java代码:

 1 public class BubbleSort {
 2     
 3     public static void main(String[] args) {
 4         
 5         int temp = 0;
 6         boolean isSorted = true;
 7         int arr[] = {36, 58, 12, 59, 65, 96, 39, 68, 24, 86};
 8         
 9         for(int i=0; i<arr.length-1; i++) {
10             isSorted = true;
11             for(int j=0; j<arr.length-1-i; j++) {
12                 if(arr[j] > arr[j+1]) {
13                     temp = arr[j];
14                     arr[j] = arr[j+1];
15                     arr[j+1] = temp;
16                     isSorted = false;
17                 }
18             }
19             if(isSorted) {
20                 break;
21             }
22         }
23         
24         for(int i=0; i<arr.length; i++) {
25             System.out.print(arr[i]+ " ");
26         }        
27     }
28 }

参考资料:维基百科

转载请注明出处:http://www.cnblogs.com/michaelwong/p/4114938.html


 

posted @ 2014-11-20 22:02  HelloMichaelWong  阅读(178)  评论(0编辑  收藏  举报