氣泡排序和選擇排序的實現與比較
阿新 • • 發佈:2018-12-26
氣泡排序:
比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。在這一點,最後的元素應該會是最大的數。
針對所有的元素重複以上的步驟,除了最後一個。
持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較。
程式碼實現(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