選擇排序與冒泡排序的特點與區別
++++++++++++++++++++++++++++++++++++++++++++++
選擇排序這一種簡單的排序方法,它的基本思想是:特點
R[n]
第一次從R[0]~R[n-1]中選取最小值,與R[0]交換;
第二次從R[1]~R[n-1]中選取最小值,與R[1]交換;
....,
第i次從R[i-1]~R[n-1]中選取最小值,與R[i-1]交換;
.....,
第n-1次從R[n-2]~R[n-1]中選取最小值,與R[n-2]交換;
總共通過n-1次,得到一個按排序碼從小到大排列的有序序列.
選擇排序的平均時間復雜度是O(n²)的。
1 for(int i = 0;i<arr.length;i++){ 2 3 for(int j= 1 ; j<arr.length;j++){ 4 if(arr[j-1]>arr[j]){ 5 int temp = arr[j]; 6 arr[j] = arr[j-1]; 7 arr[j-1] = temp; 8 9 } 10 } 11}
+++++++++++++++++++++++++++++++++++++++++++++++
冒泡排序依次比較相鄰的兩個數,將小數放在前面,大數放在後面。特點
即在第一趟:
首先比較第1個和第2個數,將小數放前,大數放後;
然後比較第2個數和第3個數,將小數放前,大數放後,如此繼續,直至比較最後兩個數,將小數放前,大數放後;
至此第一趟結束,將最大的數放到了最後。
在第二趟:
仍從第一對數開始比較(因為可能由於第2個數和第3個數的交換,使得第1個數不再小於第2個數),將小數放前,大數放後;
一直比較到倒數第二個數(倒數第一的位置上已經是最大的);
第二趟結束,在倒數第二的位置上得到一個新的最大數(其實在整個數列中是第二大的數)。
如此下去,重復以上過程,直至最終完成排序。
冒泡排序的平均時間復雜度與插入排序相同,也是平方級的,但也是非常容易實現的算法。
1 for(int i =0;i<arr.length-1;i++){ //從第一個開始遍歷 2 3 for(int j=0;j<arr.length-1-i;j++){ // 4 5 if(arr[j]>arr[j+1]){ //前面的數比後面的數大 6 int temp = arr[j]; //然後進行交換,將大的往後排 7 arr[j] = arr[j+1]; 8 arr[j+1] = temp; 9 } 10 } 11}
陌陌說:選擇排序(包含shaker排序/堆排序)和冒泡排序都屬於交換排序的一種。
計算機的一些排序算法:插入排序 、冒泡排序 、選擇排序 、快速排序 、堆排序 、歸並排序、基數排序、希爾排序
【每個排序算法都有一個 平均時間復雜度】