PHP 排序演算法(五) 希爾排序

2021-10-07 18:58:34 字數 1090 閱讀 2312

希爾排序

希爾排序又稱縮小增量排序,是指將無序序列,按照增量的不同大小,分成若干個序列,然後對子序列進行插入排序,本質上就是插入排序。

思路:  

我們先確定增量,一般初始增量我們都設定為陣列長度的一半(向下取整);

我們根據增量,將陣列分成了若干個子串行:

分別對這四個子串行進行插入排序:

然後再一次遍歷,增量設定為原先的一半,也就是繼續除以2(向下取整),得出的序列:

分別對這兩個序列進行插入排序,結果為:

再將增量除以2得到新增量為1,便可以立即進行插入排序:

得到的結果就是有序陣列,就在也無需進行排序了:1,2,3,4,5,6,7,9,10

下面的**是我按照思路,一步一步寫出來的,應該較好理解:

function shellsort($arr)}}

}$plus = floor($plus/2);

}return $arr;

}$arr = array(6,2,4,3,5,7,9,1,10);

print_r(shellsort($arr));

這下面是根據網上大神的**,然後對自己的**進行優化後的,進一步思考後也應該可以理解:

function shellsort($arr) }}

$plus = floor($plus / 2);

}return $arr;

}$arr = array(6,2,4,3,5,7,9,1,10);

print_r(shellsort($arr));

排序演算法 希爾排序

如果乙個排序演算法,每次只把諸專案移動乙個位置,則它的平均執行時間至少要和n2成比例.因為在這個排序演算法執行的過程當中,每個記錄平均都必須遍歷n 3個位置,因此如果要對直接插入排序進行有效的,實質性的改進的話,就要有一種演算法,它可以使記錄做長距離的跳躍,而不是一步一步的挪動.希爾排序也是一種插入...

排序演算法 希爾排序

摘要 排序演算法有很多,最簡單的有氣泡排序和插入排序,這兩種方法都具有o n 2 的時間界.我們想要討論的是具有更好的時間界的排序演算法,比如希爾排序.1 希爾排序的思路是通過比較一定間距的元素來進行排序,最後再對所有相鄰元素進行一次插入排序.2 希爾排序最重要的引數是增量序列 h1,h2,ht 只...

排序演算法 希爾排序

希爾排序,也稱遞減增量排序演算法,是插入排序的一種更高效的改進版本。希爾排序是非穩定排序演算法。希爾排序通過將比較的全部元素分為幾個區域來提公升插入排序的效能。這樣可以讓乙個元素可以一次性地朝最終位置前進一大步。然後演算法再取越來越小的步長進行排序,演算法的最後一步就是普通的插入排序,但是到了這步,...