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. }

     

  • 相关阅读:
    OneDay!——冲刺日志9(05-06)
    Hail_Hydra2—代码规范
    Hail_Hydra2—凡事预则立
    Alpha冲刺的问题总结
    Hail_Hydra2—冲刺日志集合
    Hail_Hydra2—总结随笔
    Hail_Hydra2—测试随笔
    Hail_Hydra2—冲刺日志(10)
    Hail_Hydra2—冲刺日志(9)
    Hail_Hydra2—冲刺日志(8)
  • 原文地址:https://www.cnblogs.com/aiwz/p/6333131.html
Copyright © 2011-2022 走看看