对一组数据(2,12,16,88,5,10)进行排序,若前三趟排序结果如下:
第一趟排序结果:2,12,16,5,10,88
第二趟排序结果:2,12,5,10,16,88
第三趟排序结果:2,5,10,12,16,88
则采用的排序方法可能是()。
A. 起泡排序
B. 希尔排序
C.归并排序
D.基数排序
gap
n//2
gap//2
将数组按 步长(gap)分组,对每组执行 插入排序;逐步减小 gap(如 gap = gap // 2),最终 gap=1 时退化为普通插入排序(此时数组已基本有序,插入排序效率高)。
gap = gap // 2
gap=1
[12, 34, 54, 2, 3]
初始数组:[12, 34, 54, 2, 3](长度 n=5)。
n=5
第一步:gap = 5 // 2 = 2(分组,间隔 2 的元素为一组):
gap = 5 // 2 = 2
0, 2, 4
[12, 54, 3]
12
54
54>12
3
3<12
[3, 12, 54]
1, 3
[34, 2]
2<34
[2, 34]
[3, 2, 12, 34, 54]
第二步:gap = 2 // 2 = 1(退化为插入排序,对整个数组排序):
gap = 2 // 2 = 1
2
2<3
[2, 3, 12, 34, 54]
12>3
34
34>12
54>34
O(n¹·³)
O(n²)
n/2
O(1)
烦人做个题还要说必须开VIP呵呵呵
参考答案:A
答案解析:考查...
登录后提交答案