zoukankan      html  css  js  c++  java
  • 自己动手写算法.Sort.Bubble

    Bubble Sort Algorithm

     

     

     

        This is an sorting algorithm which I learned when I began to study the C languange. I never wrote it down even though it's such a simple algorithm.

     

    • Implementation

    C++:

    Cs

    1. /*                                                                                  
    2. 1. pick the last one as the seed
    3. 2. if smaller than the previous one, swap it
    4. 3. else the previous becomes as the seed
    5. 4. this loop ends until to the 'top'
    6. we can make sure that the smallest one is on the top each time
    7. */
    8. void SortBubble::sort(int arr[], const int nSize)
    9. {
    10.     ALog::print(_T("# Bubble Sort: /n#"));
    11.     ALog::print(arr, nSize) << LINE_SPLIT;
    12.     int top = 0;
    13.     while( top < nSize-1 )
    14.     {       
    15.         ALog::print(_T("# ")) << top << std::endl;
    16.         for(int cur=nSize-1; cur>top; --cur)
    17.         {
    18.             if( arr[cur] < arr[cur-1] )
    19.             {
    20.                 std::swap(arr[cur], arr[cur-1]);
    21.             }
    22.             ALog::print(arr, nSize);
    23.         }
    24.         ++top;
    25.     }
    26.     ALog::print(LINE_SPLIT);
    27. }
    • Test data

    The intermediate results:

     

    1. # Bubble Sort: 
    2. # 2 9 3 7 8 6 4 5 0 1
    3. =========================
    4. # 0
    5.  2 9 3 7 8 6 4 5 0 1
    6.  2 9 3 7 8 6 4 0 5 1
    7.  2 9 3 7 8 6 0 4 5 1
    8.  2 9 3 7 8 0 6 4 5 1
    9.  2 9 3 7 0 8 6 4 5 1
    10.  2 9 3 0 7 8 6 4 5 1
    11.  2 9 0 3 7 8 6 4 5 1
    12.  2 0 9 3 7 8 6 4 5 1
    13.  0 2 9 3 7 8 6 4 5 1
    14. # 1
    15.  0 2 9 3 7 8 6 4 1 5
    16.  0 2 9 3 7 8 6 1 4 5
    17.  0 2 9 3 7 8 1 6 4 5
    18.  0 2 9 3 7 1 8 6 4 5
    19.  0 2 9 3 1 7 8 6 4 5
    20.  0 2 9 1 3 7 8 6 4 5
    21.  0 2 1 9 3 7 8 6 4 5
    22.  0 1 2 9 3 7 8 6 4 5
    23. # 2
    24.  0 1 2 9 3 7 8 6 4 5
    25.  0 1 2 9 3 7 8 4 6 5
    26.  0 1 2 9 3 7 4 8 6 5
    27.  0 1 2 9 3 4 7 8 6 5
    28.  0 1 2 9 3 4 7 8 6 5
    29.  0 1 2 3 9 4 7 8 6 5
    30.  0 1 2 3 9 4 7 8 6 5
    31. # 3
    32.  0 1 2 3 9 4 7 8 5 6
    33.  0 1 2 3 9 4 7 5 8 6
    34.  0 1 2 3 9 4 5 7 8 6
    35.  0 1 2 3 9 4 5 7 8 6
    36.  0 1 2 3 4 9 5 7 8 6
    37.  0 1 2 3 4 9 5 7 8 6
    38. # 4
    39.  0 1 2 3 4 9 5 7 6 8
    40.  0 1 2 3 4 9 5 6 7 8
    41.  0 1 2 3 4 9 5 6 7 8
    42.  0 1 2 3 4 5 9 6 7 8
    43.  0 1 2 3 4 5 9 6 7 8
    44. # 5
    45.  0 1 2 3 4 5 9 6 7 8
    46.  0 1 2 3 4 5 9 6 7 8
    47.  0 1 2 3 4 5 6 9 7 8
    48.  0 1 2 3 4 5 6 9 7 8
    49. # 6
    50.  0 1 2 3 4 5 6 9 7 8
    51.  0 1 2 3 4 5 6 7 9 8
    52.  0 1 2 3 4 5 6 7 9 8
    53. # 7
    54.  0 1 2 3 4 5 6 7 8 9
    55.  0 1 2 3 4 5 6 7 8 9
    56. # 8
    57.  0 1 2 3 4 5 6 7 8 9
    58. =========================

    • Optimization

    We can end the loops if there are no swaping operations.

    1. void SortBubble::sort2(int arr[], const int nSize)
    2. {
    3.     ALog::print(_T("# Bubble Sort: /n#"));
    4.     ALog::print(arr, nSize) << LINE_SPLIT;
    5.     int top = 0;
    6.     bool bNoSort = false;
    7.     while( !bNoSort && top < nSize-1 )
    8.     {       
    9.         bNoSort = true;
    10.         ALog::print(_T("# ")) << top << std::endl;
    11.         for(int cur=nSize-1; cur>top; --cur)
    12.         {
    13.             if( arr[cur] < arr[cur-1] )
    14.             {
    15.                 std::swap(arr[cur], arr[cur-1]);
    16.                 bNoSort = false;
    17.             }
    18.             ALog::print(arr, nSize);
    19.         }
    20.         ++top;
    21.     }
    22.     ALog::print(LINE_SPLIT);
    23. }

     

  • 相关阅读:
    Perl 简介(适合对 C 语言有点认识的读者)
    ASP.NET中的随机密码生成
    office2003下的EXCEL中英文图表名的对应
    css布局定位系列 (转)
    使用.Net访问Office编程接口
    在.NET 2.0 中发送Email
    asp .net 发邮件(带附件)测试可用
    ASP.NET图象处理详解
    DateTable全解
    带线的无限级下拉树列表
  • 原文地址:https://www.cnblogs.com/aiwz/p/6333131.html
Copyright © 2011-2022 走看看