zoukankan      html  css  js  c++  java
  • 排序_冒泡排序

     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)

  • 相关阅读:
    python常用模块②
    python常用模块①
    面向对象相关部分双下划线方法补充
    面向对象进阶 上
    面向对象初识④
    面向对象初识③
    综合架构-负载均衡
    wecent 搭建
    综合架构--存储
    综合架构--备份
  • 原文地址:https://www.cnblogs.com/abc-begin/p/7641814.html
Copyright © 2011-2022 走看看