常用排序算法之插入排序与希尔排序

本文介绍了两种基本的排序算法——插入排序和希尔排序,并通过VB代码实现这两种算法。插入排序简单直观,适用于小规模数据集;希尔排序作为插入排序的一种改进,通过增量分组的方式减少比较次数,提高了排序效率。
'插入排序
Option Explicit

Dim Result, I
Dim TestData(100)
const N = 100

Randomize
For I = 0 To N - 1
TestData(I) 
= ROUND(RND() * 32768)
Next

'插入排序
Sub ISort(byRef Array, low, hi)
Dim i, j, t
For i = low+1 To hi
   t 
= Array(i)
   j 
= i - 1
   
Do
    
If j < low Then 
     
Exit Do
    
End If
    
If Array(j) > t Then
     
Array(j+1= Array(j)
     j 
= j - 1
    
Else
     
Exit Do
    
End If
   
Loop
   
Array(j+1= t
Next
End Sub

ISort TestData, 
0, N - 1

For I = 0 To N - 1
Result 
= Result & TestData(I) & VbTab
Next

MsgBox(Result)
'希尔排序
Option Explicit

Dim Result, I
Dim TestData(100)
const N = 100

Randomize
For I = 0 To N - 1
TestData(I) 
= ROUND(RND() * 32768)
Next

Sub SortWithStep(byRef Array, low, hi, stp)
Dim s, i, j, t
For s = 0 To stp-1
    
For i = s+low+stp To hi Step stp
           t 
= Array(i)
           j 
= i-stp
           
Do
                
If j < s+low Then 
                     
Exit Do
                
End If
                
If Array(j) > t Then
                     
Array(j+stp) = Array(j)
                     j 
= j - stp
                
Else
                     
Exit Do
                
End If
           
Loop
           
Array(j+stp) = t
    
Next
Next
End Sub

'希尔排序
Sub ShellSort(byRef Array, low, hi)
Dim Step
Step 
= Int((hi-low+1)/2+ 1
Do
    SortWithStep 
Array, low, hi, Step
    
If Step < 1 Then 
        
Exit Do
    
Else
        Step 
= Int(Step/2)
    
End If
Loop
End Sub

ShellSort TestData, 
0, N - 1

For I = 0 To N - 1
Result 
= Result & TestData(I) & VbTab
Next

MsgBox(Result)
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值