希尔排序
希尔排序(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))