VB-快速排序

快速排序(QuickSort)

快速排序 是分而治之的算法。(分成几部分一点点来处理)在排序过程中会选择 一个元素 作为支点或者称为轴,将数组元素一个个与之比较,分成小于和大于 的两个新的数组。所以从另一种理解来看快速排序的关键过程是一个分区的过程。 在分区的过程中由于选取 轴元素 不同的方式 也使得快速排序也产生了许多不同的版本。但最终的实践效果区别并不大。


时间复杂度:

从平均情况来看快速排序的平均时间复杂度为O(nlogn),若数组恰巧为倒序每次选 时都为最大或者最小时有最坏情况,时间复杂度为O(n^2)


###排序的稳定性:
由于在快速排序过程中,各数组元素与选定的 进行对比交换位置,所以使得快速排序是一种不稳定的排序过程。


###从VB来看-插入排序

因为快速排序使用了分而治之的处理思想,所以在VB代码的设计中使用了递归的方式来满足我们一次次分割的需要。

Sub QuickSort(MyArray(), L, R)              '获取数组,并取得下、上界值到L、R
Dim I, J, X, Y

    I = L                                   '确定从数组左边与轴比较的元素位置I
    J = R                                   '确定从数组右边与轴比较的元素位置J
    X = MyArray((L + R) / 2)                '将X选取为数组的轴
        
    While (I <= J)                          '当左右查询位置没有相交时执行
        
        While (MyArray(I) < X And I < R)    '在左边找出大于 X 的值
            I = I + 1
        Wend
        
        While (X < MyArray(J) And J > L)    '在右边找出小于 X 的值
            J = J - 1
        Wend
        
        If (I <= J) Then                    '当查询的位置没有相交时执行
            
            Y = MyArray(I)                  '将小于轴的元素放在左边,大于轴的换到右边
            MyArray(I) = MyArray(J)         
            MyArray(J) = Y
            
            I = I + 1                       '移动从左边开始的查询位置
            J = J - 1                       '移动从右边开始的查询位置
        End If
        
        gIterations = gIterations + 1       '记录一次循环
    Wend
    '递归过程
    If (L < J) Then Call QuickSort(MyArray(), L, J)            '分析轴左边的数组
    If (I < R) Then Call QuickSort(MyArray(), I, R)            '分析轴右边的数组

End Sub

目前没有找到好的抽象的动图举例,如果有好的例子,我会补上哒。
感谢您的阅读~

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

格林希尔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值