|
本帖最后由 mg0601001 于 2014-1-10 19:38 编辑
小弟在学习vba排序中的插入排序,以下是自己写的代码,调试了很多次,觉得与兰版的原理差不多,但是就是结果不对,求指教,多谢!
Sub t1()
Dim arr
Dim x, y, k, tem
arr = Range("a1:a10")
For x = 2 To UBound(arr)
For y = x - 1 To 1 Step -1
If arr(y, 1) > arr(x, 1) Then
arr(y + 1, 1) = arr(y, 1)
Else
Exit For
End If
Next y
tem = arr(x, 1)
arr(x, 1) = arr(y + 1, 1)
arr(y + 1, 1) = tem
Next x
Range("b1").Resize(UBound(arr)) = arr
End Sub
- Sub test1()
- arr = Application.Transpose(Range("a1:a10")) '待排序数据转为一维数组以便观察
- For x = 2 To UBound(arr) '从第2行开始检查至末尾
- insert_Tmp = arr(x) '把当前行x对应的数值存入【待插入值】即临时变量insert_Tmp
- For y = x - 1 To 1 Step -1 '倒序检查当前行之前所有行 x-1 to 1
- If arr(y) > insert_Tmp Then '如果当前行y对应的数值arr(y)比【待插入值】还要大
- arr(y + 1) = arr(y) '那么需要向下一行y+1挪一下位置,留出空位让【待插入值】可以插入
- 'arr(y) = insert_Tmp 'y行中插入【待插入值】……但为了提高效率不要马上插入,这句不执行
- Else
- Exit For '如果当前行y对应数值已经不必【待插入值】大,那么可以确定本次插入位置为y+1
- End If
- Next y
- arr(y + 1) = insert_Tmp '比较结束,按最后确定的插入位置y+1行中插入【待插入值】
- Next x
- Range("b1").Resize(UBound(arr)) = Application.Transpose(arr) '向工作表中输出排序结果
- End Sub
复制代码
|
|