1. 程式人生 > >氣泡排序和選擇排序的實現與比較

氣泡排序和選擇排序的實現與比較

氣泡排序:

比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。

對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。

針對所有的元素重複以上的步驟,除了最後一個。

持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。

程式碼實現(c++):

void sort_arr2(int arr[],int number_used){
     int min_num = arr[0],number = 0;
     for(int index = 0;index<number_used;index++){
          for(int i =0;i<number_used-index-1;i++){
               if(arr[i]>arr[i+1]){
                    number = arr[i] ;
                    arr[i] = arr[i+1];
                    arr[i+1] = number;
               }
          }
     }
}

選擇排序:

選擇排序是蠻力法在排序演算法中的一個重要運用,選擇排序開始的時候,我們掃描整個列表,找到它的最小元素然後和第一個元素交換,將最小元素放到它在有序表的最終位置上。然後我們從第二個元素開始掃描列表,找到最後n-1個元素的最小元素,再和第二個元素交換位置,把第二小的元素放在它最終的位置上。如此迴圈下去,在n-1遍以後,列表就排好序了。

程式碼實現(C++):

void sort_arr(int arr[],int number_used){
     int min_num = arr[0],number = 0;
     for(int index = 0;index<number_used;index++){
          for(int i = index+1;i<number_used;i++){
                    if(arr[i]<arr[index]){
                         number = arr[i];
                         arr[i] = arr[index];
                         arr[index] = number;
                    }
          }
     }
}

  氣泡排序:比較 N-1)+(N-2)+...+2+1 = N*(N-1)/2=N2/2

       交換  0——N2/2 = N2/4

       總時間 3/4*N2

  選擇排序:比較 N-1)+(N-2)+...+2+1 = N*(N-1)/2=N2/2

       交換  0——3*N-1=3*N-1/2=3/2*N

       總時間 N2/2+3/2*N