直接插入排序是資料越有序越快,最快時間複雜度可達到o(n),選擇排序無論何時都是o(n^2), 快速排序越有序越慢,它要從後到前遍歷找比基準小的,時間複雜度達到o(n),堆排序需要不斷進行調整,時間複雜度為o(nlog2^n)
定理:通過交換相鄰元素進行排序的任何演算法平均都需要》=(n*n)時間。
作為交換相鄰元素來排序的一種演算法(如氣泡排序、選擇排序),其:
/**
* 插入排序,o(n*n)
* *@param array
* 陣列
*/public
static
super anytype>> void
insertionsort(anytype array)
array[hole] = temp;
}}
希爾排序是對插入排序的改進,但是其時間效率和選擇的增量有關,採用希爾增量時最壞時間仍然是=(n*n)。
/**
* 希爾排序,使用希爾增量,o(n*n)
* *@param array
* 陣列
*/public
static
super anytype>> void
shellsort(anytype array)
}}
**見這裡
**見這裡
陣列s排序的基本演算法由4步組成:
如果s中元素個數小於等於10個,就採用插入排序;
取s中乙個元素為樞紐元素v(推薦使用三數中值分割法);
把剩下s-1個元素分成兩個不相交的集合:s1(元素小於等於樞紐元素),s2(元素大於等於樞紐元素);
分好後的陣列排序為:s1+v+s2。
**見這裡
java資料結構與演算法 快速排序
該方法的基本思想是 1 先從數列中取出乙個數作為基準數。2 分割槽過程,將比這個數大的數全放到它的右邊,小於或等於它的數全放到它的左邊。3 再對左右區間重複第二步,直到各區間只有乙個數。雖然快速排序稱為分治法,但分治法這三個字顯然無法很好的概括快速排序的全部步驟。因此我的對快速排序作了進一步的說明 ...
Java資料結構與演算法 六 希爾排序
插入排序在對幾乎已經排好序的資料操作時,效率高,即可以達到線性排序的效率。但插入排序一般來說是低效的,因為插入排序每次只能將資料移動一位。system.out.println 排序之前 for int i 0 iout.print a i 希爾排序 int d a.length while true...
Java資料結構與演算法 六 希爾排序
一 希爾排序的產生 二 希爾排序是基於插入排序的以下兩點性質而提出改進方法的 插入排序在對幾乎已經排好序的資料操作時,效率高,即可以達到線性排序的效率。但插入排序一般來說是低效的,因為插入排序每次只能將資料移動一位。public static void main string args system...