阳光VIP

少壮不努力,老大徒伤悲。平日弗用功,自到临期悔。
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

c++学习笔记:直接排序

Posted on 2012-02-16 20:52  阳光VIP  阅读(148)  评论(0编辑  收藏  举报

for (j=i;j>-1;j--)

  •    {
  •          if (map[j]<temp)//第一个数大于第二个数,前面大于后面就进行交换
  •          {
  •            // map[j]=map[j];
  •             map[j+1]=map[j];
  •             map[j]=temp;
  •             
  •          }

 基本思想:
把 n 个待排序的元素看成为一个有序表和一个无序表,开始时有序表中只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。

 
说白一点,直接排序=有序表+无序表==》排序成一个我们想要的结果
 
实现过程:
  1. 第一步求升序排序
  2. #include <iostream>
  3. using namespace std;
  4. int map[10]={3,1,2,10,8,4,5,6,7,9};
  5. void main()
  6. {
  7.     int i,j;
  8.     int temp;
  9.     for (i=0;i<10-1;i++)
  10.     {
  11.          temp=map[i+1];//无序表的临时变量元素
  12. //第一种条件写法
  13.          j=i;//从i=0 开始到i=9结束循环
  14.          while(j>-1&&temp<map[j])
  15.          {  
  16.              map[j+1]=map[j];
  17.              j--;//退出循环的标记
  18.          }
  19.          map[j+1]=temp; 
  20.     }
  21.     for (int k=0;k<10;k++)
  22.     {
  23.         cout<<map[k]<<endl;
  24.     }
  25. }

 

第二种写法:

  1. #include <iostream>
  2. using namespace std;
  3. int map[10]={3,1,2,10,8,4,5,6,7,9};
  4. void main()
  5. {
  6.     int i,j;
  7.     int temp;
  8.     for (i=0;i<10-1;i++)
  9.     {
  10.          temp=map[i+1];//无序表的临时变量元素
  11. //两种写法
  12. //       j=i;//从i=0 开始到i=9结束循环
  13. //       while(j>-1&&temp<map[j])
  14. //       {  
  15. //           map[j+1]=map[j];
  16. //           j--;//退出循环的标记
  17. //       }
  18. //       map[j+1]=temp; 
  19.    for (j=i;j>-1;j--)
  20.    {
  21.          if (map[j]<temp)//第一个数大于第二个数,前面大于后面就进行交换
  22.          {
  23.            // map[j]=map[j];
  24.             map[j+1]=map[j];
  25.             map[j]=temp;
  26.             
  27.          }
  28.    
  29.    }
  30. //map[j+1]=temp;
  31.     
  32.     }
  33.     for (int k=0;k<10;k++)
  34.     {
  35.         cout<<map[k]<<endl;
  36.     }

 

比较上下两种写法,其实实现的结果是一样的,目的是排序1-10顺利列表。

第一步:我们将第一个元素列为有序表,那么剩下的9个元素就是我们通过比较大小插入到有序表当中;

 

第二步:使用的循环,一个外循环,一个内循环,外循环目的在于遍历剩下的9个数,而内循环比较数的大小,而后插入有序表的后面

  1.    for (j=i;j>-1;j--)
  2.    {
  3.          if (map[j]<temp)//第一个数大于第二个数,前面大于后面就进行交换
  4.          {
  5.            // map[j]=map[j];
  6.             map[j+1]=map[j];//将前面的数赋予后面的数
  7.             map[j]=temp;//将后面的数赋予前面的数
  8.             
  9.          }
  10. 如果后面的数大于前面的数,那么两个数就需要进行交互了,说白了,大的在后,前的在小

 

结果:1,2,3,4,5,6,7,8,9,10

完成直接排序

 

说到这里,我们联系到我们的As3.0代码中同样类似的功能,可以发挥一下想像用flash 模拟这种数据结构

 

 

基本过程:

一,定义一个数组,一个没有排序好的数组

map[10],这样做法尽量简单,明白,省去麻烦的代码。

 

二,

我们把第一个数定义为有序表,剩下的10-1=9的个数属于无序表

(有序表+无序表)=》排序成有序表

 

三,利用两个循环,一个外循环,一个内循环,对剩下的9个数进行比较,大的数放在后面,小的数放在前面,进行位置交互,

 

四,输出结果,输出我们的结果

 

 

扩展:

尝试用flash as来模拟直接排序的过程。