十大經典排序演算法 希爾排序

2021-09-25 20:50:04 字數 846 閱讀 7156

一、演算法複雜度

二、演算法步驟

1、選擇乙個增量序列 t1,t2,……,tk,其中 ti > tj, tk = 1;

2、按增量序列個數 k,對序列進行 k 趟排序;

3、每趟排序,根據對應的增量 ti,將待排序列分割成若干長度為 m 的子串行,分別對各子表進行直接插入排序。僅增量因子為 1 時,整個序列作為乙個表來處理,表長度即為整個序列的長度。

三、**實現

import copy

import math

def shell_sort(s):

arr = copy.deepcopy(s)

gap = 1

while gap < (len(arr) / 3):

gap = gap * 3 + 1

while gap > 0:

for i in range(gap, len(arr)):

tmp = arr[i]

j = i - gap

while j >= 0 and arr[j] > tmp:

arr[j + gap] = arr[j]

j -= gap

arr[j + gap] = tmp

gap = math.floor(gap / 3)

return arr

#測試結果

test = [3, 5, 4, 7, 2]

print(shell_sort(test)) #[2, 3, 4, 5, 7]

十大經典排序演算法

載自 排序演算法是 資料結構與演算法 中最基本的演算法之一。排序演算法可以分為內部排序和外部排序,內部排序是資料記錄在記憶體中進行排序,而外部排序是因排序的資料很大,一次不能容納全部的排序記錄,在排序過程中需要訪問外存。常見的內部排序演算法有 插入排序 希爾排序 選擇排序 氣泡排序 歸併排序 快速排...

十大經典排序演算法

不穩定排序種類為4種 快速排序 核心思想是partition操作 二分法分而治之 平均時間複雜度nlogn 希爾排序 高階版的插入排序,先把間隔較遠的子串行排序,最後間隔為1時,等同於插入排序 插入排序在序列有序時,時間複雜度常數級,所以先讓子串行總體有序,能有效降低時間複雜度 平均時間複雜度n 1...

十大經典排序演算法

常見經典排序 非線性時間比較類排序 通過比較來決定元素間的相對次序,由於其時間複雜度不能突破o nlogn 因此稱為非線性時間比較類排序。線性時間非比較類排序 不通過比較來決定元素間的相對次序,它可以突破基於比較排序的時間下界,以線性時間執行,因此稱為線性時間非比較類排序。時間複雜度 空間複雜度 穩...