abc_begin

导航

排序_冒泡排序

 

 1 void bubbleSort(LineList R[], int n)
 2 {
 3     int i, j;
 4     for (i = 1; i < n; i++)
 5     {
 6         for (j = 1; j <= n - i; j++)
 7         {
 8             if (R[j].key > R[j + 1].key)
 9             {
10                 R[0] = R[j];
11                 R[j] = R[j + 1];
12                 R[j + 1] = R[0];
13             }
14         }
15     }
16 }

 

上面代码效率还是比较低下的,因为有可能中间某次就有序了,但是依然多执行了很多次循环,可以改为如下算法:

 1 void bubbleSort(ElementType A[], int N)  
 2 {  
 3     int p, i;  
 4     bool flag;  
 5   
 6     for (p = N - 1; p >= 0; p--)  
 7     {  
 8         /* 标记该次循环中是否发生交换;若无,则说明整个序列有序 */  
 9         flag = false;  
10         /* 一趟冒泡 */  
11         for (i = 0; i < p; i++)  
12         {  
13             /* 每次循环找出一个最大元素并交换到最右端 */  
14             if (A[i] > A[i + 1])  
15             {  
16                 swap(&A[i], &A[i + 1]);  
17                 flag = true;  
18             }  
19         }  
20   
21         /* 若全程无交换则跳出循环 */  
22         if (flag == false)  
23         {  
24             break;  
25         }  
26     }  
27 }  

 

稳定性:稳定

复杂度:

(1)最好:O(N)

(2)最坏:O(N2)

posted on 2017-10-09 16:58  LastBattle  阅读(161)  评论(0编辑  收藏  举报