再看排序算法

    再一次拿出笔记本,再一次看老师给我们讲的经典课程笔记。看着笔记,脑海浮现的是老师当年讲课的情景,想到的是老师挂在嘴边的那句话:“其实,不就是两个三角形嘛!想到排序,就想两个三角形,肯定错不了!”。

    这句话,确实有效,每次看到排序,都能很自然的想到,两个三角形!

    那两个三角形到底是什么意思?我们来看一看!

    这是我当时听课时自己画的两个简单的示意图,虽然简陋,但就像两张图片,一直存储在脑中!

 

 两张图待补充!

 

    当时我们刚刚接触程序设计,根本不知道什么是算法,提到算法就想躲,因为我们的印象是,它太难了。

    经过那节课,老师告诉我们算法,不难!

    现在来重温一下当年的知识。

 

    选择排序法:(以从小到大排序为例)

    基本原理:选择排序的基本原理是这样的,首先假设第一个数小的,让第一个数依次和之后的数比较大小,如果后面的数有比第一个数小的,则把它放在第一个数的位置。例如:3421567这几个数从小到大排序,假设第一个数是最小的,让第一个数与第二个数比较,如果第二个数比第一个数小,则把第二个数放在第一个数的位置。然后第一个位置上的数和第三个数比较,同理,依次进行。

    因为每次都是第一个位置上的数在和后面的数比较(交换),所以一圈下来,第一个位置上肯定是最小的那个数。第二次则是让第二个位置上的数与后面的所有数比较(交换),第二圈的比较就和第一个位置没有关系了(因为第一个已经是所有数中最小的),这样每次都向后缩进一个位置,全部画出,就得出了我们上面的三角形图像。

    代码实现

void SelectSortArray() 
{ 
    int min_index; 
    for(int i=0;i<n-1;i++) 
    { 
         min_index=i; 
         for(int j=i+1;j<n;j++)//每次扫描选择最小项 
            if(arr[j]<arr[min_index])  min_index=j; 
         if(min_index!=i)//找到最小项交换,即将这一项移到列表中的正确位置 
         { 
             int temp; 
             temp=arr[i]; arr[i]=arr[min_index]; arr[min_index]=temp; 
	} 
   } 
} 


 

    冒泡排序法:

    基本原理:冒泡排序和选择排序有点类似,它是两个两个相互比较,而不是用一个位置与其他所有的位置比较。还是上面那个例子:3421567这几个数从小到大排序。冒泡排序是首先第一个与第二个比较,如果第一个比第二个大,则两个数交换位置,然后拿第二个去与第三个比较,将大的放在后面。注意,这个时候我们不知道第三个(交换前)与第一个谁大谁小,我们只是把他们三个中最大的放在了后面,而不管其他两个。这时最大的那个数,就像浮力大一样,一直交换,直到到达水面,这就是冒泡法名字的来源。

    代码实现:

void BubbleSortArray() 
{ 
      for(int i=1;i<n;i++) 
      { 
        for(int j=0;i<n-i;j++) 
         { 
              if(a[j]>a[j+1])//比较交换相邻元素 
               { 
                   int temp; 
                   temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; 
               } 
         } 
      } 
} 

    这两个算法虽然很简单,效率也较差,但是确是我们编程入门所必需的知识,是我们必须要理解的基本功。但事实上我们好多人一直在用排序法,可真正问到他们用的是选择还是冒泡的原理的时候,有几个人能说出来。这就像建一座高楼大厦,我们不清楚我们使用的是什么设计思想,即使我们也把楼建成了,我们也算不上是建筑大师! 

 

10种排序算法总结连接

 

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值