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个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较,将它插入到有序表中的适当位置,使之成为新的有序表。
说白一点,直接排序=有序表+无序表==》排序成一个我们想要的结果
实现过程:
- 第一步求升序排序
- #include <iostream>
- using namespace std;
- int map[10]={3,1,2,10,8,4,5,6,7,9};
- void main()
- {
- int i,j;
- int temp;
- for (i=0;i<10-1;i++)
- {
- temp=map[i+1];//无序表的临时变量元素
- //第一种条件写法
- j=i;//从i=0 开始到i=9结束循环
- while(j>-1&&temp<map[j])
- {
- map[j+1]=map[j];
- j--;//退出循环的标记
- }
- map[j+1]=temp;
- }
- for (int k=0;k<10;k++)
- {
- cout<<map[k]<<endl;
- }
- }
第二种写法:
- #include <iostream>
- using namespace std;
- int map[10]={3,1,2,10,8,4,5,6,7,9};
- void main()
- {
- int i,j;
- int temp;
- for (i=0;i<10-1;i++)
- {
- temp=map[i+1];//无序表的临时变量元素
- //两种写法
- // j=i;//从i=0 开始到i=9结束循环
- // while(j>-1&&temp<map[j])
- // {
- // map[j+1]=map[j];
- // j--;//退出循环的标记
- // }
- // map[j+1]=temp;
- for (j=i;j>-1;j--)
- {
- if (map[j]<temp)//第一个数大于第二个数,前面大于后面就进行交换
- {
- // map[j]=map[j];
- map[j+1]=map[j];
- map[j]=temp;
- }
- }
- //map[j+1]=temp;
- }
- for (int k=0;k<10;k++)
- {
- cout<<map[k]<<endl;
- }
比较上下两种写法,其实实现的结果是一样的,目的是排序1-10顺利列表。
第一步:我们将第一个元素列为有序表,那么剩下的9个元素就是我们通过比较大小插入到有序表当中;
第二步:使用的循环,一个外循环,一个内循环,外循环目的在于遍历剩下的9个数,而内循环比较数的大小,而后插入有序表的后面
- for (j=i;j>-1;j--)
- {
- if (map[j]<temp)//第一个数大于第二个数,前面大于后面就进行交换
- {
- // map[j]=map[j];
- map[j+1]=map[j];//将前面的数赋予后面的数
- map[j]=temp;//将后面的数赋予前面的数
- }
- 如果后面的数大于前面的数,那么两个数就需要进行交互了,说白了,大的在后,前的在小
结果:1,2,3,4,5,6,7,8,9,10
完成直接排序
说到这里,我们联系到我们的As3.0代码中同样类似的功能,可以发挥一下想像用flash 模拟这种数据结构
基本过程:
一,定义一个数组,一个没有排序好的数组
map[10],这样做法尽量简单,明白,省去麻烦的代码。
二,
我们把第一个数定义为有序表,剩下的10-1=9的个数属于无序表
(有序表+无序表)=》排序成有序表
三,利用两个循环,一个外循环,一个内循环,对剩下的9个数进行比较,大的数放在后面,小的数放在前面,进行位置交互,
四,输出结果,输出我们的结果
扩展:
尝试用flash as来模拟直接排序的过程。