Java干货来袭!新手必看系列之Java希尔排序。_java自学_java相关资讯_成都java培训机构

Java干货来袭!新手必看系列之Java希尔排序。

  • 作者:创始人
  • 发表时间:2021-11-08 10:37:35

对于刚学习Java的小白,或者刚要学习Java的小白来说,可能并不很清楚Java八大排序法希尔排序,那么什么是希尔排序?其代码又是怎么样实现的呢?新手必看!

什么是希尔排序?

希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至 1 时,整个文件恰被分成一组,算法便终止先取一个小于n的整数d1作为第一个增量,把文件的全部记录分组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2 =dt dt-1....

Java希尔排序

该方法实质上是一种分组插入方法

比较相隔较远距离(称为增量)的数,使得数移动时能跨过多个元素,则进行一次比较就可能消除多个元素交换。D.L.shell1959年在以他名字命名的排序算法中实现了这一思想。算法先将要排序的一组数按某个增量d分成若干组,每组中记录的下标相差d.对每组中全部元素进行排序,然后再用一个较小的增量对它进行分组,在每组中再进行排序。当增量减到1时,整个要排序的数被分成一组,排序完成。一般的初次取序列的一半为增量,以后每次减半,直到增量为1

代码实现;

def shell_sort(alist):

    n=len(alist)

    gap=n//2 #开始的间距设为表长除以2

    while gap>=1:

        for j in range(gap,n):

          i=j

          while(i-gap>=0):

            if alist[i]<alist[i-gap]:

                alist[i],alist[i-gap]=alist[i-gap],alist[i]

                i-=gap

            else:

                break

        # 缩短gap

        gap//=2

if __name__ == '__main__':

    list=[12,3,5,15,67,35,22,69,78]

    print("原始序列为:%s"%list)

    shell_sort(list)

print("排序后的序列为:%s"%list)

关注成都知了堂Java培训,带你了解更多Java相关问题和相关干货小知识。