希爾排序又稱為縮小增量排序,其原理如下:先將待排序的陣列元素分成多個子串行,使得每個子串行的元素個數相對較少,然後對每個子串行分別進行直接插入排序,待整個序列基本有序後,再對所有元素進行一次快速排序。希爾排序的步驟:
選擇乙個步長序列:t1,t2,t3,t4,…,tk,滿足ti > tj(i**:介紹到了堆排序,避免不了需要了解下大頂堆和小頂堆的概念:希爾排序的特點:public
static
void
shellsort
(int
array)
else
break;}
array[j+h]
= tmp;}}
}
希爾排序的關鍵並不是隨便的分組然後各自排序,而是將相隔某個增量的記錄組合成乙個子串行,然後跳躍式移動,使得排序的效率提高。
大頂堆:對於給定的n個序列(r(1), r(2), r(3),…,r(n)),僅當滿足條件(r(i) > r(2i)且r(i) > r(2i+1))時,稱之為大頂堆,堆頂元素為最大值。
小頂堆:對於給定的n個序列(r(1), r(2), r(3),…,r(n)),僅當滿足條件(r(i) < r(2i)且r(i) < r(2i+1))時,稱之為小頂堆,堆頂元素為最小值。堆排序的基本思想:
對於給定了的n個記錄,初始時把這些記錄看成一顆順序儲存的二叉樹,然後調整成為乙個大頂堆,然後將堆的最後乙個元素和堆頂元素進行交換,最後乙個元素就是最大的元素了。接著再將前面(n-1)個元素重新調整成為乙個新的大頂堆,再將堆頂元素和最後乙個元素進行交換得到最大的元素。依次類推…**實現:
public
static
void
adjustminheap
(int
a,int pos,
int len)
if(a[child]
< temp)
else
break;}
a[pos]
= temp;
}public
static
void
myminheapsort
(int
array)
}
這裡我的**沒有注釋,其實我也沒認真搞懂整個堆排序,原理是懂了,**是從書上copy的,就先放在這等以後用得上回頭再看。 希爾排序,堆排序,快速排序
插入排序的改進演算法,不穩定的排序演算法,空間複雜度為o 1 public static void shellsort int a 氣泡排序的改進演算法,不穩定的排序演算法 空間複雜度在o log2n 和o n 之間 時間複雜度在o n 和o n2 之間,平均時間複雜度為o nlog2n 而當陣列初...
希爾排序,快速排序,堆排序
最近在準備資料結構的考試,於是用部落格記錄下自己複習的過程。今天的內容是三種高階排序。希爾排序 當序列增量為incr k 2 t k 1 1時,時間複雜度為o n1.5 以序列增量分組,對每組進行大小調整。templatevoid shellinsert t elem,int n,int incr ...
希爾排序,堆排序,快速排序
希爾排序 最優情況下 時間複雜度為 o n 1.3 最差的情況下為 o n 2 增量序列的最後乙個增量值必須等於1 shell sort vector v1 堆排序 void heapadjust int a,int m,int n for i n i 1 i 快速排序 快排在樞紐選取時可以優化,三...