6个经典的排序算法

1.直接插入排序

Public Sub InsertSort()

Dim Arr(10) As Integer

For i = 1 To 10

 Arr(i) = Int(Rnd() * 100)

 Cells(i, 1).Value = Arr(i)

Next

For i = 2 To 10

  If Arr(i) < Arr(i - 1) Then

  tmp = Arr(i)

  j = i

  Do

  tmp = Arr(j)

  Arr(j) = Arr(j - 1)

  Arr(j - 1) = tmp

  j = j - 1

  Loop While tmp < Arr(j - 1)

End If

Next i

For i = 1 To 10

Cells(i, 2).Value = Arr(i)

Next

End Sub

2.簡單選擇排序

Public Sub SelectSort()

Dim Arr(10) As Integer

For i = 1 To 10

 Arr(i) = Int(Rnd() * 100)

 Cells(i, 1).Value = Arr(i)

Next

For i = 1 To 10

 k = i

 For j = i + 1 To 10

  If Arr(j) < Arr(k) Then

  k = j

  End If

 Next j

 If i <> k Then

  tmp = Arr(i)

  Arr(i) = Arr(k)

  Arr(k) = tmp

 End If

Next i

For i = 1 To 10

Cells(i, 2).Value = Arr(i)

Next

End Sub

3.冒泡排序

Public Sub BubbleSort()

Dim Arr(10) As Integer

For i = 1 To 10

 Arr(i) = Int(Rnd() * 100)

 Cells(i, 1).Value = Arr(i)

Next

For i = 1 To 10

flag = 0

 For j = 10 To i + 1 Step -1

  If Arr(j) < Arr(j - 1) Then

   tmp = Arr(j)

   Arr(j) = Arr(j - 1)

   Arr(j - 1) = tmp

   flag = 1

  End If

 Next j

If flag = 0 Then

Exit For

End If

Next i

For i = 1 To 10

Cells(i, 2).Value = Arr(i)

Next

End Sub

4.希爾排序

Public Sub ShellSort()

Dim Arr(10) As Integer

For i = 1 To 10

 Arr(i) = Int(Rnd() * 100)

 Cells(i, 1).Value = Arr(i)

Next

h = 5

Do While h > 0

For i = h To 10

  If Arr(i) < Arr(i - 1) Then

  tmp = Arr(i)

  j = i

  Do

  tmp = Arr(j)

  Arr(j) = Arr(j - 1)

  Arr(j - 1) = tmp

  j = j - 1

  Loop While tmp < Arr(j - 1)

End If

Next i

h = h - 2

Loop

For i = 1 To 10

Cells(i, 2).Value = Arr(i)

Next

End Sub

5.快速排序

Public Sub Kuaisu()

Dim Arr(10) As Integer

For i = 1 To 10

 Arr(i) = Int(Rnd() * 100)

 Cells(i, 1).Value = Arr(i)

Next

Call Kuaisusort(Arr(), 1, 10)

For i = 1 To 10

Cells(i, 2).Value = Arr(i)

Next

End Sub

Public Function Partition(Tarr() As Integer, Left As Integer, Right As Integer) As Integer

Pivot = Tarr(Left)

low = Left

Hight = Right

Do While (low <> Hight)

    If Tarr(Hight) > Pivot Then

       Hight = Hight - 1

    ElseIf Tarr(low) <= Pivot Then

      low = low + 1

    Else

      Tmp = Tarr(low)

      Tarr(low) = Tarr(Hight)

      Tarr(Hight) = Tmp

    End If

Loop

Tarr(Left) = Tarr(low)

Tarr(low) = Pivot

Partition = low

End Function

Public Sub Kuaisusort(Tarr() As Integer, Left As Integer, Right As Integer)

If Left < Right Then

Pt = Partition(Tarr(), Left, Right)

Call Kuaisusort(Tarr(), Left, Pt - 1)

Call Kuaisusort(Tarr(), Pt + 1, Right)

End If

End Sub

6.堆排序

Public Sub DuiSort()

Dim Arr(10) As Integer

For i = 1 To 10

 Arr(i) = Int(Rnd() * 100)

 Cells(i, 1).Value = Arr(i)

Next

j = 10

Do While j > 0

For i = (j \ 2) To 1 Step -1

 m = 2 * i

 n = 2 * i + 1

  If n < j Then

   If Arr(i) < Arr(n) Then

    tmp = Arr(i)

    Arr(i) = Arr(n)

    Arr(n) = tmp

   End If

 End If

  If Arr(i) < Arr(m) Then

  tmp = Arr(i)

  Arr(i) = Arr(m)

  Arr(m) = tmp

 End If

Next

tmp = Arr(j)

Arr(j) = Arr(1)

Arr(1) = tmp

j = j - 1

Loop

For i = 1 To 10

Cells(i, 2).Value = Arr(i)

Next

End Sub

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值