排序算法总结(一)

【前言】

       前一阵子直在学习算法,通过不断的总结我也发现了算法的魅力。虽然只是简单的排序算法,但是每一次自己动手去画图,去排列对比,看一些相关小视频的时候,感触就会越来越深,从刚开始的只不过简简单单的排序到后来升华成算法的艺术,需要自己慢慢去体会这个过程。

      排序主要分为内排序和外排序,如果待排序的记录比较少,整个过程的所有记录都可以存在内存中,这样的排序叫做“内排序”。反之,待排序数量太大,内存无法容纳所有记录,在排序的过程中还需要访问外存,这样的排序就叫做“外排序”。   由于本人的道行还不够深,只能研究最基础的排序算法,这篇博客我将总结一下内排序中最基础的选择排序和冒泡排序。

 

【选择排序】

      选择排序的基本思想就是逐个的找出第i小的记录,放在数组第i个位置上。每个位置都是一个变量,可以存放不同的记录。选择排序的关键是:如何从剩余的未排序的记录中找出最小(或最大)的那个记录。

步骤:找出第1小的记录并与第1个位置的记录互换。第1小的记录一次交换到位。后面的步骤与第一步原理相同。

如下图所示:

      每行表示第i次选择后的排序,带箭头的两个记录表示下一轮准备交换的两个记录。双竖线左边就表示已经排好的序列,不再参与排序。下划线的记录表示第i小的记录。最后一轮找到第6小的记录,只剩下一个记录,此时整个序列已经排好了顺序。

      选择排序的外循环迭代(n-1)次交换,第i次内循环迭代(n-1-i)次操作。即需要进行(n-1-i)次比较,总的过程需要=n(n-1)/2 次比较,这样看来如果比较的记录比较多的话,就可能会浪费比较多的时间了。

 

 

 

    代码实现:

  

Dim t As String
    '确定外循环的次数
    For i = 1 To 9
        '确定内循环的次数
        For j = i + 1 To 10
            If a(i) > a(j) Then
                t = a(i): a(i) = a(j): a(j) = t
            End If
        Next j
    Next i

 

 

 

      这个链接是关于选择排序的一个小视频,它以舞蹈的形式向大家展示了算法的魅力,也更便于我们理解算法,欢迎大家点击观看。

      链接:舞动的排序算法--选择排序  

 

【冒泡排序】

      冒泡排序的基本思想就是两两的比较待排序记录的关键码,发现记录逆置(大小顺序不对)的就交换位置,直到没有逆置为止。

      步骤:从数组的末端开始,不断的进行相邻的比较,不满足排序要求的就交换,

如下图示:

      带箭头的两个记录表示下一轮准备交换的两个记录。双竖线左边就表示已经排好的序列,不再参与排序。下划线的记录表示第i小的记录。

      在第一次冒泡比较的过程中(i=0),从最后一位开始,满足排序顺序的不用交换,所以29越过了32、34’,向左移动了两位,遇到12停下来,紧接着12又越过了78、34、45到达数组的最左端,第一次冒泡结束。然后组成了新的序列进行第二次冒泡。另外当两个34进行比较式,并不会改变原有的次序。 

      因此总比较次数和交换次数最多为:=n(n-1)/2  可以看成,冒泡排序法在记录比较多时也是不太适合使用的。

 代码实现:

    

Dim t As String
    '确定外循环的次数
    For i = 1 To 9
        '确定内循环的次数
        For j = 1 To 10 - i

 

 

            If a(j) < a(j + 1) Then

 

 

                t = a(j): a(j) = a(j + 1): a(j + 1) = t
            End If
        Next j
    Next i

 

 

 

      这个链接是关于冒泡排序的一个小视频,它以舞蹈的形式向大家展示了算法的魅力,也更便于我们理解算法,欢迎大家点击观看。

      链接:舞动的排序算法--冒泡排序

 

【总结】

      这两个算法的运算次数都比较多,运算时间比较久,虽然现实的操作中用到的时候比较少,但是冒泡排序和选择排序所折射的算法思想却是排序算法的基础。这次的总结先到这里,下篇博客将会总结一下插入排序和快速排序中的希尔排序,这两种排序所用的时间将会大大减少,容本菜鸟再修炼修炼,继续更新下一篇博客~~

      感谢您的阅读,未完待续……

 

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 游动-白 设计师:白松林 返回首页