1. 選擇排序
兩層迴圈巢狀,0到n-1選出最小的,與第0個交換,縮小集合為1到n-1,選出最小的,與第乙個交換……
時間複雜度:o(n2),
空間複雜度:因為中間只增加了兩個新變數,儲存最小值和下標,所以空間複雜度為o(1)
當陣列為已排序狀態時,仍需要n次比較,最好的情況仍需要o(n2)
public static void selectsort(int array)
}array[x] = array[i];
array[i] = min;
} }
2. 氣泡排序
兩兩比較,將較大的值放後面,第一次迴圈結束後,最大值在最後,二次迴圈後,次大值在倒數第二個……
若某次迴圈,未發生任何交換,則說明佇列已排序。
時間複雜度:o(n2),
空間複雜度:因為中間只增加了乙個temp值做輔助,所以空間複雜度為o(1)
當陣列為已排序狀態時,只需要一次迴圈,n次比較,最好的情況只需要o(n)
public static int bubblesort(int array)
}} return array;
}
3. 插入排序
向前面已排號的序列中插入新的值,第二層巢狀裡,需要比較值,並向後移動。
時間複雜度: o(n2)
空間複雜度: o(1)
當對已排序陣列處理時,第二層巢狀裡不需要向後移動,最好的情況時間複雜度為o(n)
public static void insertsort(int array)
array[j + 1] = currentvalue;
} }
4. 歸併排序
這是一種遞迴的排序演算法,將陣列分成兩組,分別排序,再合併一起。排序的總數為n,n/2,n/4,n/8……
排序在合併時,需要使用乙個輔助陣列。
時間複雜度:o(nlogn)
空間複雜度:o(n)
最好的情況時,即資料已排序的情況,時間複雜度為仍為o(nlogn)
public static void mergesort(int array)
} public static int conarray(int array1, int array2)
else
} while(i < m)
while(j < n)
return temp;
}
5. 快速排序
選擇第乙個值作為主元,將剩餘值分列主元的兩邊,這時主元的位置是正確的位置,遞迴的呼叫這個方法,將所有的值作為主元,確定位置。
時間複雜度: o(nlogn)
空間複雜度: o(1) 不需要輔助陣列
最差的情況下,主元將陣列分成乙個空陣列和乙個完整陣列,時間複雜度為o(n2)
public static void quicksort(int array)
public static void quicksort(int array, int first, int last)
} public static int partition(int array, int first, int last)
} while (high > first && array[high] >= pivot)
high--;
if (pivot > array[high]) else
return pivot;
}
8種排序演算法
學習了這麼多的排序演算法,還沒有做個總結,呵呵 氣泡排序 氣泡排序是最慢的排序演算法。在實際運用中它是效率最低的演算法。它通過一趟又一趟地比較陣列中的每乙個元素,使較大的資料下沉,較小的資料上公升。它是o n 2 的演算法。快速排序 快速排序是乙個就地排序,分而治之,大規模遞迴的演算法。從本質上來說...
8種排序演算法
public class sortcode a j 1 insertnum 找到位置,插入當前元素 system.out.println 直接插入排序後的陣列為 arrays.tostring a 2.希爾排序 針對直接插入排序的下效率問題,有人對次進行了改進與公升級,這就是現在的希爾排序。希爾排序...
8種排序演算法總結
1.直接插入排序 原理 將陣列分為無序區和有序區兩個區,然後不斷將無序區的第乙個元素按大小順序插入到有序區中去,最終將所有無序區元素都移動到有序區完成排序。要點 設立哨兵,作為臨時儲存和判斷陣列邊界之用。實現 void sortnumber method2 int array,int length ...