# three proc shellSort*[T](x: var openArray[T]) = let length = len(x) var size = 1 while size < length: size *= 3 + 1 while size >= 1: for i in size ..< length: let temp = x[i] for j in countdown(i, size, size): if x[j - size] > temp: x[j] = x[j - size] else: x[j] = temp break size = size div3
测试程序
我们使用 algorithm 模块中的 isSorted 来判断数组是否已经有序。
1 2 3 4 5 6 7 8
when isMainModule: import random, sequtils, algorithm
randomize() var x = newSeqWith(1000, rand(0 .. 100000000)) shellSort(x) echo isSorted(x)