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

     

  • 相关阅读:
    牛客练习赛51 D题
    Educational Codeforces Round 72 (Rated for Div. 2) C题
    Codeforces Round #583 (Div. 1 + Div. 2, based on Olympiad of Metropolises) C题
    Codeforces Round #583 (Div. 1 + Div. 2, based on Olympiad of Metropolises) A题
    Codeforces Round #583 (Div. 1 + Div. 2, based on Olympiad of Metropolises) A题
    Educational Codeforces Round 72 (Rated for Div. 2) B题
    Educational Codeforces Round 72 (Rated for Div. 2) A题
    《DSP using MATLAB》Problem 7.2
    《DSP using MATLAB》Problem 7.1
    《DSP using MATLAB》Problem 6.24
  • 原文地址:https://www.cnblogs.com/aiwz/p/6333131.html
Copyright © 2011-2022 走看看