ソートソートアルゴリズム----ヒル

シェルソート

  ヒルソートは(シェルソート)挿入ソートです。また、インクリメンタル還元ソートと呼ばれる優先改良版のためのより効率的なアルゴリズムに直接挿入され、この方法の基本的な考え方は、「デルタの行によって分離されたいくつかのサブシーケンスに分割する配列の全体最初の要素((ギャップ「)要素から構成される時間)に直接ソートし、次に実質的要素(十分に小さな増分)、直接挿入ソートのすべての要素の全体の順序付けられたシーケンスであると、インクリメンタルソートを低減することにより追跡しました。時ヒル直接挿入ソートよりも大幅に高い効率をソートするように(最良の場合に近い)基本要素の場合に直接挿入ソート順序ので、効率が非常に高いです。  

  

  

 1 """
 2 希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。
 3 """
 4 
 5 
 6 # 方式一:元素采取直接插入排序从前往后比较
 7 def shell_sort(int_list):
 8     length = len(int_list)
 9     if length <= 1: return int_list
10     step = length // 2
11 
12     while step > 0:
13         for i in range(step, length, step):
14             item = int_list[i]
15             for j in range(0, i, step):
16                 if int_list[j] > item:
17                     for k in range(i, j, -step):
18                         int_list[k] = int_list[k - step]
19                     int_list[j] = item
20                     break
21         step //= 2
22     return int_list
23 
24 
25 # 方式二:元素采取直接插入排序从后往前比较
26 # 继续缩小增量
27 def shell_sort1(alist):
28     gap = len(alist) // 2
29     while gap >= 1:
30         # 将增量设置成gap
31         for i in range(gap, len(alist)):
32             while i > 0:
33                 if alist[i] < alist[i - gap]:
34                     alist[i], alist[i - gap] = alist[i - gap], alist[i]
35                     i -= gap
36                 else:
37                     break
38         gap //= 2
39     return alist
40 
41 
42 # print(shell_sort([11, 3, 5, 89, 1,23456,87678,2345,4567,0,3,5]))
43 if __name__ == '__main__':
44     int_str = input("请输入逗号分割的整数>>>").strip()
45     int_list = [int(i) for i in int_str.split(",")]
46     print(shell_sort(int_list))
47     # print(shell_sort1(int_list))

 

おすすめ

転載: www.cnblogs.com/open-yang/p/11367089.html