2017-08-18 32 views
-1

我已经构建从伪代码,并在Python脚本C代码希尔排序算法..无法返回排序的外壳列表

(我的工作,通过算法作为练习)

我似乎无法得到排序的列表被1至返回

当我打印(内)作为环的一部分,它确实将它们打印出来,以便1并结束..

我试图从功能

我G系数的响应返回内[[9]]

这是最后一次迭代..所以我知道它迭代,排序正确..

但是我不能让它返回排序列表

[1,2,3,4,5,6,7,8,9]

unsort_list = [4, 6, 3, 2, 1, 9, 7, 8, 5] 

def shell(a): 
    """ 
    Step 1 − Initialize the value of h 
    Step 2 − Divide the list into smaller sub-list of equal interval h 
    Step 3 − Sort these sub-lists using insertion sort 
    Step 3 − Repeat until complete list is sorted 

    """ 

    interval_h = 1 
    i = 0 
    l = len(a) 
    elements = a 
    inner = [] 
    outer = [] 
    value_ins = [] 

    print(l) 

    while interval_h <= l/3: 
     interval_h = interval_h * 3 + 1 

    while interval_h > 0: 
     outer = interval_h 
     for i in elements: 
      while outer < i: 
       outer += 1 
       value_ins = [outer] 
       inner = outer 

       while inner > interval_h - 1 and [inner - interval_h] >= value_ins: 
        inner = [inner - interval_h] 
        inner -= interval_h 

      inner = value_ins 

     interval_h = (interval_h - 1) 
     i += 1 
    return inner 

sorted_list = [shell(unsort_list)] 
print(sorted_list) 
+2

是什么程序** **目前回报?将此添加到您的帖子中。 – Adi219

+0

在'while'外部'我'这一行是'它指的是''''''''''''''我在元素''中提到''interval_h'或'i'提到? – Adi219

+2

可以在原地进行外壳排序而无需创建额外的列表。还要注意,你不能比较列表和整数(如'outer

回答

1

经过多次剥离和重建后,采取了上述建议我已经来到这个解决方案使用枚举。

谢谢你的建议

def maf_shell(a): 
    """ 
    Step 1 − Initialize the value of h 
    Step 2 − Divide the list into smaller sub-list of equal interval (h) 
    Step 3 − Sort these sub-lists using insertion sort 
    Step 3 − Repeat until complete list is sorted 

    """ 
    interval = len(a) // 2 

    while interval: 
     for i, j in enumerate(a): 
      while i >= interval and a[i - interval] > j: 
       a[i] = a[i - interval] 
       i -= interval 
      a[i] = j 
     interval = 1 if interval == 2 else int(interval * 5.0/11)     



unsort_list = [4, 6, 3, 2, 1, 9, 7, 8, 5] 
maf_shell(unsort_list) 

print(unsort_list)