演算法複習 shell排序

2021-06-23 03:59:02 字數 598 閱讀 6395

演算法基本思想:首先取乙個小余陣列長度的一半或一半以下的步長d,然後通過讓陣列裡下標是d的倍數的元素取出來分成一組,然後把每個組了選出來的元素進行插入排序,一輪結束後,把d的值減半,再次排序,直到d=1。

static int shellalg(int r){

int i =0,j=0,t=0;

int n = r.length;

int d = n/2;

//第一層迴圈控制步長

for(;d>0;d=d/2){

//第二層迴圈控制從陣列中取出d的倍數下標的元素

for(i=d;i=0;j-=d){

if(t

時間複雜度

最好情況:由於希爾排序的好壞和步長d的選擇有很多關係,因此,目前還沒有得出最好的步長如何選擇(現在有些比較好的選擇了,但不確定是否是最好的)。所以,不知道最好的情況下的演算法時間複雜度。  

最壞情況下:o(n*logn),最壞的情況下和平均情況下差不多。  

平均情況下:o(n*logn)

空間複雜度:沒有用其他額外的空間o(1)

穩定性:不穩定。因為每輪都要移動元素,相同的元素通常不會在一輪排序中並插入排序,很有可能被移動,因此是不穩定的。

排序演算法複習

參考自 直接插入排序 從小到大排列 n個資料,第乙個資料平凡有序 假設前i 1個資料串有序,根據第i個的大小將第i個插入到此串中,則前i個的資料串也有序。因此可得到n個資料有序。插入方法 待插入元素為第i元素,數值存為temp,將 i 之前的元素 j 從第 i 1 元素開始與之比較 如果比temp大...

演算法複習 排序

排序中主要有插入排序 氣泡排序 歸併排序 快速排序等 主要從空間消耗 時間複雜度 最差時間複雜度等方面考慮演算法的好處 1.插入排序 插入排序是一種簡單直觀的排序演算法。它的工作原理非常類似於我們抓撲克牌 對於未排序資料 右手抓到的牌 在已排序序列 左手已經排好序的手牌 中從後向前掃瞄,找到相應位置...

演算法複習 排序

穩定的排序 排序之後,源資料中相同的資料相對位置不會發生改變 不穩定的排序 反之。test array 12,10,1,5,10 foreach test as val for i 0 i test i bin test222,58,0,count test222 1 function bin da...