代码改变世界

冒泡排序算法的实现:

2014-11-10 21:08  牧羽  阅读(294)  评论(0)    收藏  举报

冒泡排序的基本思想是:交换。

1.即比较相邻的前后两个数据,如果前面的数据大于后面的数据,就进行一次交换;

2.这样每经过一躺比较后就有一个最大的数下沉到底部,直到整个数组有序。

 

算法的代码实现如下:

 1 /*冒泡排序算法的实现代码1:*/
 2 void bubblesort(int a[], int n)
 3 {
 4     int i, j;
 5 
 6     for(i = 0; i < n; i++)
 7         for(j = 1; j < n-i; j++)
 8             if(a[j-1] > a[j])
 9                 swap(&a[j-1], &a[j]);
10 }

代码1效率太低,当整个数组已经达到有序时,此时不应该继续比较和交换,解决方案是设置标志位。

/*冒泡排序算法的实现代码2:*/
1
void bubblesort(int a[], int n) 2 { 3 int j, k; 4 bool flag; 5 6 flag = true; 7 k = n; 8 while(flag) 9 { 10 flag = false; 11 12 for(j = 1; j < k; j++) 13 if(a[j-1] > a[j]) 14 { 15 swap(&a[j-1], &a[j]); 16 flag = true; 17 } 18 k--; 19 } 20 }

代码2就是常用的排序算法,不过当排序的数据很多,但只有前面几个数据是无序的,就需要每次记住最后交换数据的位置。

 1 /* 冒泡排序算法的代码实现3 */
 2 void bubblesort(int a[], int n)
 3 {
 4     int j, k; 
 5     int flag;
 6 
 7     flag = n;
 8     while(flag > 0)
 9     {
10         k = flag;
11         flag = 0;
12         
13         for(j = 1; j < k; j++)
14             if(a[j-1] > a[j])
15             {
16                 swap(&a[j-1], &a[j]);
17                 flag = j;
18             }
19     }
20 }