希尔排序思想:
            
             算法先将要排序的一组数按某个增量d分成若干组,每组中记录的下标相差d.对每组中全部元素进行排序,然后再用一个较小的增量对它进行,在每组中再进行排序。当增量减到1时,整个要排序的数被分成一组,排序完成。
            
             一般的初次取序列的一半为增量,以后每次减半,直到增量为1。
          
            
              
                def
              
              
                shell_sort
              
              
                (
              
              
                list
              
              
                )
              
              
                :
              
              
    n 
              
                =
              
              
                len
              
              
                (
              
              
                list
              
              
                )
              
              
    gap 
              
                =
              
               n
              
                //
              
              
                2
              
              
    new_list 
              
                =
              
              
                [
              
              
                ]
              
              
                while
              
               gap 
              
                >
              
              
                1
              
              
                :
              
              
                for
              
               i 
              
                in
              
              
                range
              
              
                (
              
              gap
              
                )
              
              
                :
              
              
                if
              
              
                list
              
              
                [
              
              i
              
                ]
              
              
                >
              
              
                list
              
              
                [
              
              i
              
                +
              
              gap
              
                ]
              
              
                :
              
              
                list
              
              
                [
              
              i
              
                ]
              
              
                ,
              
              
                list
              
              
                [
              
              i
              
                +
              
              gap
              
                ]
              
              
                =
              
              
                list
              
              
                [
              
              i
              
                +
              
              gap
              
                ]
              
              
                ,
              
              
                list
              
              
                [
              
              i
              
                ]
              
              
        gap 
              
                =
              
               gap 
              
                //
              
              
                2
              
              
                ;
              
              
                if
              
               gap 
              
                ==
              
              
                1
              
              
                :
              
              
                for
              
               j 
              
                in
              
              
                range
              
              
                (
              
              n
              
                )
              
              
                :
              
              
                if
              
               j 
              
                ==
              
              
                0
              
              
                :
              
              
                new_list
              
                .
              
              append
              
                (
              
              
                list
              
              
                [
              
              j
              
                ]
              
              
                )
              
              
                else
              
              
                :
              
              
                new_list
              
                .
              
              append
              
                (
              
              
                list
              
              
                [
              
              j
              
                ]
              
              
                )
              
              
                for
              
               k 
              
                in
              
              
                range
              
              
                (
              
              j
              
                ,
              
              
                0
              
              
                ,
              
              
                -
              
              
                1
              
              
                )
              
              
                :
              
              
                if
              
               new_list
              
                [
              
              k
              
                ]
              
              
                <
              
               new_list
              
                [
              
              k
              
                -
              
              
                1
              
              
                ]
              
              
                :
              
              
                        new_list
              
                [
              
              k
              
                ]
              
              
                ,
              
               new_list
              
                [
              
              k
              
                -
              
              
                1
              
              
                ]
              
              
                =
              
               new_list
              
                [
              
              k
              
                -
              
              
                1
              
              
                ]
              
              
                ,
              
               new_list
              
                [
              
              k
              
                ]
              
              
                return
              
               new_list
              
                if
              
               __name__ 
              
                ==
              
              
                '__main__'
              
              
                :
              
              
    a 
              
                =
              
              
                [
              
              
                58
              
              
                ,
              
              
                89
              
              
                ,
              
              
                56
              
              
                ,
              
              
                3
              
              
                ,
              
              
                4
              
              
                ,
              
              
                5
              
              
                ,
              
              
                79879
              
              
                ,
              
              
                263536
              
              
                ,
              
              
                45215
              
              
                ,
              
              
                4543
              
              
                ]
              
              
    b 
              
                =
              
               shell_sort
              
                (
              
              a
              
                )
              
              
                print
              
              
                (
              
              b
              
                )
              
            
          
        


 
					 
					