十大排序演算法
阿新 • • 發佈:2020-07-27
1.氣泡排序
氣泡排序的思路就是每次找到陣列中最大的值放到陣列的末尾,
時間複雜度:O(n2)
public void sort(int[] array){ for(int end = array.length - 1 ; end > 0 ; end--){ for(int begin = 1 ; begin <= end ;begin++){ if(array[begin] < array[begin-1]){ int temp = array[begin]; array[begin]= array[begin - 1]; array[begin - 1] = temp; } } } }
氣泡排序的優化1:如果一次迴圈中沒有元素的交換,就說明此時的陣列已經是有序的了,就不用在排序了。
public void sort(int[] array){ for(int end = array.length - 1 ; end > 0 ; end--){ boolean sorted = true;for(int begin = 1 ; begin <= end ;begin++){ if(array[begin] < array[begin-1]){ int temp = array[begin]; array[begin] = array[begin - 1]; array[begin - 1] = temp; sorted = false; } }if(sorted) return; } }
氣泡排序的優化2:用一個int來記錄最後一次交換的索引,當局部有序的時候,可以減少排序的次數.
public static void sort(int[] array){ for(int end = array.length - 1 ; end > 0 ; end--){ int sortedIndex = 1; for(int begin = 1 ; begin <= end ;begin++){ if(array[begin] < array[begin-1]){ int temp = array[begin]; array[begin] = array[begin - 1]; array[begin - 1] = temp; sortedIndex = begin; } } end = sortedIndex; } }
2.選擇排序
記錄陣列中最大的值,一次迴圈之後,在把最大值和陣列最後一個元素進行交換.
與氣泡排序的區別:氣泡排序每進行一次比較,就會有一次交換,但是選擇排序會在一輪迴圈之後在交換,交換次數小於氣泡排序.
public static void sort(int[] array){ for(int end = array.length - 1 ; end > 0 ; end--){ int max = 0; for(int begin = 1 ; begin <= end ;begin++){ if(array[begin] > array[max]){ max = begin; } } int temp = array[max]; array[max] = array[end]; array[end] = temp; } }