希爾排序
希爾排序又稱縮小增量排序,是2023年由d.l.shell提出來的。
演算法描述
1)先取定乙個小於n的整數gap1作為第乙個增量,把整個序列分成gap1組。所有距離為gap1的倍數的元素放在同一組中,在各組內分別進行排序(分組內採用直接插入排序或其它基本方式的排序)。
2)然後取第二個增量gap2 < gap1,重複上述的分組和排序。
3)依此類推,直至增量gap=1,即所有元素放在同一組中進行排序為止。
演算法分析
1)開始時 gap 的值較大, 子串行中的元素較少, 排序速度較快。
2)隨著排序進展, gap 值逐漸變小, 子串行中元素個數逐漸變多,由於前面大多數元素已基本有序, 所以排序速度仍然很快。
3)分組後n值減小,n²更小,而t(n)=o(n²),所以t(n)從總體上看是減小了。
4)gap的取法有多種。 shell 提出取 gap = n/2 ,gap = gap/2 ,…,直到gap = 1。gap若是奇,則gap=gap+1
演算法實現:
package cn.hncu.shell;
/* 有的演算法,對於越有序的序列排的速度更快---例如:氣泡排序,插入排序......
* 希爾排序的出發點:
* 1)每進行一趟排序,讓我們的序列更有序
* 2)演算法複雜度是n*n,如果能讓n更小,那麼n*n當然就會更小!
* */
public
class shellsort ;
for(int gap=(a.length+1)/2;gap>0; )}}
//在這裡判斷gap的值是否大於1
if(gap>1)else
}for(int x:a)
}private
static
void
swap(int a, int j, int i)
}
資料結構 排序(希爾排序)
希爾排序法 插入排序公升級版 include include include include 強調 網上,書上的希爾排序法都有問題 希爾排序並非按乙個增量d,將乙個陣列分成若干小的陣列,對每個陣列進行插入排序,真正的希爾排序步驟 第一步,通過業界常規 d 陣列長度 3 1 求出增量d 第二步 取陣列...
資料結構 排序 希爾排序
希爾排序的基本思想是 先將待排序表分割成若干形如l i,i d,i 2d,i kd 的子表,分別進行直接插入排序,當整個表中的元素有序的時候,再對全體記錄進行一次直接插入排序。時間複雜度 o n 穩定性 不穩定 適用性 僅適用於順序表 下面投放希爾排序的 include include includ...
資料結構 希爾排序!!!
希爾排序是將一組資料進行分組,再將分組的資料進行排序,這樣資料就會逐漸的趨向有序,當分組的個數為1的時候將整個陣列排序一遍,那麼整個陣列就排序好了。基本思想 先將整個待排元素序列分割成若干個子串行 由相隔某個 增量 的元素組成的 分別進行直接插入排序,然後依次縮減增量再進行排序,待整個序列中的元素基...