[数据结构与算法]希尔排序 python和c++实现

[数据结构与算法]希尔排序 python和c++实现,第1张

[数据结构与算法]希尔排序 python和c++实现

算法思路
每一次:固定间隔把数据分组,每一组进行排序
每次比上次选取更小的间隔分组,再每组排序,直到间隔为1

代码
c++:(越看越不明白了,后看)

int gap = length;//length是数组的元素个数,gap是间隔长度
    while (gap>1){
        gap = gap/3 +1;///其实就是生成一个间隔序列
        for (int i = gap; i= 0 && arr[preIndex]>current) {//如果同组上个数据大于当前数据
                arr[i]  = arr[preIndex];//就是把这两个格子里的数据调换了位置
                //注意此时current还存着最后的数据
                preIndex -= gap;//再找同组上上个数据
            }
            arr[preIndex+gap] = current;//当找到每组第一个数据时,把current放进去
        }
    }

py:

import numpy as np#import这个为了后面生成测试数据
def shellSort(arr):
    N = len(arr)
    increment = N//2
    while increment > 0:
        i = increment
        while i < N:
            j = i - increment#同组上个数的索引
            tmp = arr[i]#存下arr[i]
            while j >= 0 and arr[j] > tmp:
                arr[j + increment] = arr[j]#这里是把arr[j]存入同组下个数据中了
                j -= increment
            arr[j + increment] = tmp
            i += 1
        increment //= 2
    return arr
if __name__ == '__main__':
    #随机生成20个20以内的数,乱序
    nums=np.random.permutation(20)
    print(shellSort(nums))

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5594519.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-15
下一篇 2022-12-15

发表评论

登录后才能评论

评论列表(0条)

保存