加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

从VB来看-QuickSort(VB快速排序)

发布时间:2020-12-17 07:37:27 所属栏目:百科 来源:网络整理
导读:快速排序(QuickSort) 快速排序 是分而治之的算法。(分成几部分一点点来处理)在排序过程中会选择 一个元素 作为支点或者称为轴,将数组元素一个个与之比较,分成小于 轴 和大于 轴 的两个新的数组。所以从另一种理解来看快速排序的关键过程是一个分区的过

快速排序(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(),J)            '分析轴左边的数组
    If (I < R) Then Call QuickSort(MyArray(),I,R)            '分析轴右边的数组

End Sub

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读