三种排序方法——温故而知新

           起因:

                    今天看VB.NET视频,听到老师说了这样一句话:“80%的面试都会考到冒泡排序。”这时才对它重视起来。

           分类:

                     排序方法一般可分为:筛选法排序、直接排序、冒泡排序三种。

           回忆:

                     大家还记得吗?学习VB的时候,米老师给我们形象的讲解过筛选法排序和冒泡排序。我还隐隐约约的记得老师给我们画了一个直角三角形:

     三种排序方法——温故而知新_第1张图片

关于具体内容可能大家也跟我一样印象模糊了。没关系,在跟我来回顾一遍吧!

           一、筛选法排序

          

          描述:第一轮将A(1)与A(2)比较,若A(1)<A(2),则交换A(1)和A(2)的值;再将A(1)与A(3)、A(4)……A(N)依次按照以上规则比较和交换,第一轮完毕,N个数中最大数存放在A(1)中。

                      第二轮将A(2)与A(3)、A(4)……A(N)依次按以上规则比较和交换;

                      第三轮将A(3)与A(4)、A(5)……A(N)依次按以上规则比较和交换;

                      第N-1轮将A(N-1)与A(N)按以上规则比较排序完成。

          例如:

<strong><span style="font-size:18px;">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 </span></strong>
          二、直接排序

三种排序方法——温故而知新_第2张图片

        描述:第一轮将Pointer=1,A(Pointer)与A(2)比较,若A(Pointer)<A(2),则Pointer=2;再用A(Pointer)与A(3)……A(N)比较;看是否改变了Pointer的大小,如果改变了,则将A(Pointer)与A(1)互换。

                    第二轮将Pointer=2,A(Pointer)与A(3)比较,若A(Pointer)<A(3),则Pointer=3;再用A(Pointer)与A(4)……A(N)比较;看是否改变了Pointer的大小,如果改变了,则将A(Pointer)与A(2)互换。

                    ……

        例如:

         

<strong><span style="font-size:18px;">For I = 1 To N-1
        Pointer=I
        For J = I+1 To N
            If A(Pointer) < A(J) Then
                Pointer=J
            End If
        Next J
        If I<>Pointer Then
            T=A(I)
            A(I) = A(Pointer)
            A(Pointer)=A(I)
        End If 
 Next I
        </span></strong>
        三、冒泡排序


         描述:第一轮将A(1)与A(2)比较,若A(1)>A(2),则交换A(1)和A(2)的值;再将A(2)与A(3)比较,方法相同;以此类推,直到A(N-1)与A(N)按照以上规则比较后,第一轮完毕,N个数中最大数存放在A(N)中。

                      第二轮将A(1)与A(2)、A(2)与A(3)……A(N-2)与A(N-1)依次按以上规则比较和交换;

                      第N-1轮将A(1)与A(2)按以上规则比较排序完成。

                      每一个的比较后都会使小数逐渐浮起来,大数下沉,就像冒泡一样。

          例如:

<strong><span style="font-size:18px;">  For m = 10 To 2 Step -1     
      For n = 1 To m - 1
        If a(n) > a(n + 1) Then
        t = a(n)
        a(n) = a(n + 1)
        a(n + 1) = t
       End If
      Next n
  Next m</span></strong>

        总结:

                 无论是学习什么语言,都会用到这三种排序的方法,记是永远记不住的,我们只有多看,多想,多用,才能掌握。首先要把这三位区分开,我个人觉得比较代码的不同比较好理解。例如:(1)筛选法中是用A(I)和A(J)比较;(2)冒泡中是用A(J)和A(J+1)比较;(3)直接排序中是用指针A(Pointer)与A(J)比较,而且与前两个不同的是交换的是Pointer与I的值,而不是数组的值。

      三大排序方法就回顾到这里,有说错的地方还请各方神圣指出。

你可能感兴趣的:(三种排序方法——温故而知新)