常用的排序演算法及其適用場景

2021-10-05 02:34:11 字數 1840 閱讀 1986

常用的排序演算法主要有氣泡排序,選擇排序,插入排序,希爾排序,堆排序,歸併排序,快速排序,桶排序等。

穩定的排序演算法:氣泡排序,插入排序;

不穩定的排序演算法:選擇排序,希爾排序,堆排序,歸併排序,快速排序。

3.1氣泡排序

氣泡排序的時間複雜度為o(n*n),空間複雜度為o(1),在資料有序的時候時間複雜度可以達到o(n)。

適用的情景為資料量量不大,對穩定性有要求,且資料基本有序的情況下。其常見實現方式如下:

public int sort_bubble1(int array) }}

return array;

}

3.2選擇排序

選擇排序的時間複雜度為o(n*n),空間複雜度為o(1),由於每次選出待排序資料中的最小值(增序)或最大值(降序)插入到當前的有序佇列中,相對於氣泡排序減少了交換的次數。

當資料量不大,且對穩定性沒有要求的時候,適用於選擇排序。其**如下:

public int sort_******(int array) 

if (min != i)

}return array;

}

3.3插入排序

插入排序的時間複雜度為o(n*n),空間複雜度為o(1),最好的情況下即當資料有序時可以達到o(n)的時間複雜度,其排序的思想非常類似於我們打撲克牌的時對手裡的牌進行排序的過程,選出乙個值,將其插入在合適的排序位置。

適用於資料量不大,對演算法的穩定性有要求,且資料區域性或者整體有序的情況。其**如下:

public int sort_insert(int array) 

array[j + 1] = temp;}}

return array;

}

3.4快速排序

快速排序算發的時間複雜度為o(nlogn),由於快速排序使用遞迴的方式實現,因此空間複雜度為o(nlogn)到o(n)之間。快速排序的思想是設定乙個資料作為分割線,將小於它的資料交換至其左側,大於它的資料交換到它的右側(當資料增序排列的時候)。

由於快速排序的原理,常用於查詢一組中前k大的資料。其**如下:

private int partion(int array, int low, int high) 

array[low] = mid;

system.out.println("array is:" + arrays.tostring(array));

system.out.println("low is:" + low + ";high is:" + high + ";index is:" + low);

return low;

}private void sort(int array, int low, int high)

}public int sort_quick(int array)

3.5堆排序

堆排序的時間複雜度為o(nlog),空間複雜度為o(1)。實現原理是根據大頂堆或小頂堆得資料結構原理,對待排序資料進行調整,最終達到整體有序的效果,其**如下:

private void heap_adjust(int array, int s, int len) 

array[s] = temp;

}public int sort_heap(int array)

for (int j = len - 1; j > 0; j--)

return array;

}

常用的排序演算法及其適用場景

常用的排序演算法及其適用場景 1.介紹 常用的排序演算法主要有氣泡排序,選擇排序,插入排序,希爾排序,堆排序,歸併排序,快速排序,桶排序等。2.穩定性 其中氣泡排序,插入排序,是穩定的排序演算法 選擇排序,希爾排序,堆排序,歸併排序,快速排序是不穩定的排序演算法。3.排序演算法的實現 3.1氣泡排序...

TiDB 的適用場景和不適用場景

典型的oltp場景 當您需要對海量資料 數十億行 進行隨機 實時讀 寫訪問時 實時 htap 場景 實時htap 混合事務 分析處理 要是有乙個使用tidb的類似oltp的場景,並且希望在tiflash的幫助下原地進行 olap分析時,新鮮的資料,對oltp效能無干擾 資料整合 有多個資料來源時,可...

Java常用集合包適用場景

1.arraylist 基於陣列方式實現,無容量的限制。在執行插入元素時可能要擴容,在刪除元素時並不會減少陣列的容量。如果希望相應的縮小陣列容量,可以呼叫trimtosize 在查詢元素時要遍歷陣列,對於非null的元素採取equals的方式尋找。非執行緒安全。2.linkedlist 基於雙向鍊錶...