排序算法主要分爲兩大類java
排序算法的穩定性定義:
若是序列中有a=b,排序前a在b以前,排序後a還在b以前,則稱這種排序算法是穩定的。算法
上例告訴咱們,算法是由具體的人來寫的,寫的垃圾,穩定算法也能寫的不穩定
重複地走訪過要排序的元素,依次比較相鄰兩個元素,若是他們的順序錯誤就把他們調換過來,直到沒有元素再須要交換,排序完成。這個算法的名字由來是由於越小(或越大)的元素會經由交換慢慢「浮」到數列的頂端。數組
給一組整數,按照升序排序,使用選擇排序,冒泡排序,插入排序或者任何 O(n2) 的排序算法性能
對於數組 [3, 2, 1, 4, 5], 排序後爲:[1, 2, 3, 4, 5]spa
無需分析3d
fun sortInteger(a : IntArray) { val len = a.size - 1 var alreadyNum = 0 var sortFinish = false while (alreadyNum <= len - 1 && !sortFinish) { var perSortFinish = true for (i in 1..(len - alreadyNum)) { if (a[i-1] > a[i]) { val temp = a[i-1] a[i-1] = a[i] a[i] = temp perSortFinish = false } } sortFinish = perSortFinish alreadyNum += 1 } }
public void sortIntegers(int[] A) { int len = A.length - 1; int alreadyNum = 0; boolean sortFinish = false; while (alreadyNum <= len - 1 && !sortFinish) { boolean perSortFinish = true; for (int i=1; i <= len-alreadyNum; i++) { if (A[i-1] > A[i]) { int temp = A[i-1]; A[i-1] = A[i]; A[i] = temp; perSortFinish = false; } } sortFinish = perSortFinish; alreadyNum += 1; } }
經過一趟排序將要排序的數據分割成獨立的兩部分,其中一部分的全部數據都比另一部分的全部數據都要小,而後再按此方法對這兩部分數據分別進行快速排序,整個排序過程能夠遞歸進行,以此達到整個數據變成有序序列。code
直接沿用上一題的實例,爲便於閱讀,將該例子再寫一遍blog
給一組整數,按照升序排序,使用選擇排序,冒泡排序,插入排序或者任何 O(n2) 的排序算法排序
對於數組 [3, 2, 1, 4, 5], 排序後爲:[1, 2, 3, 4, 5]遞歸
無需分析