• 排序算法----希尔排序


    希尔排序

      希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本,该方法的基本思想是:先将整个待排元素序列分割成若干个子序列(由相隔某个“增量(gap)”的元素组成的)分别进行直接插入排序,然后依次缩减增量再进行排序,待整个序列中的元素基本有序(增量足够小)时,再对全体元素进行一次直接插入排序。因为直接插入排序在元素基本有序的情况下(接近最好情况),效率是很高的,因此希尔排序在时间效率比直接插入排序有较大提高。  

      

      

     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))
  • 相关阅读:
    YII2 Gridview 批量删除
    YII2 的复杂查询的一个例子
    Service.properties参数详解
    Kafka安装
    Zookeeper集群安装
    Kafka partition 副本迁移与broker上下线
    副本和分区状态机
    Controller机制
    replica副本同步机制
    Server端处理fetchRequest请求
  • 原文地址:https://www.cnblogs.com/open-yang/p/11367089.html
Copyright © 2020-2023  润新知