差不多
谢谢
如果你是珠海的
我请你吃饭
呵呵
我从来不说一些没有意义、为祸人间、又没有建设性的话,所以我不留下任何说明。
正如所说,楼主的程序是直接插入排序
所以直接插入排序,就是从一个有序列中依次,抽出一个元素插入到这个序列中,因为要变为有序的序列,所以插入元素要其前面的元素比较大小
int b,f,i,k;
static a[11]={9,8,7,6,5,4,3,2,1,0}; //一个无序序列
for(i=1;i<=9;i++)//从第二个位置开始抽元素
{
b=a[i];//将抽出的元素保存在b中
for(k=i-1;k>=0;k--)//用抽出的元素与其前面的元素项比较大小
{if(b<a[k])
a[k+1]=a[k];//如果抽出元素比前面的小,则把小的元素放到大的元素的位置,即单向交换
else
break;}否则到下次循环(最外面的for)抽取下一个位置的元素
a[k+1]=b;//因为当抽出元素小的时候会被交换时候覆盖掉所以用b来保存被覆盖的值,
}
演示如下:
原序列为: 9 8 7 6 5 4 3 2 1 0
元素位置: 0 1 2 3 4 5 6 7 8 9
-----------------------------------------------------
i=1时:
抽出元素: 8
序列: 9 ^ 7 6 5 4 3 2 1 0
比较: 8 9 7 6 5 4 3 2 1 0 // 8插入后 比前面的9小,所以位置会被9替换,9原先位置应该为8,所以a[k+1]=b的意思就是把8放到原先9的位置
-----------------------------------------------------
i=2时:
抽出元素: 7
序列: 8 9 ^ 6 5 4 3 2 1 0
比较: 7 8 9 6 5 4 3 2 1 0
-----------------------------------------------------
i=3时:
抽出元素: 6
序列: 7 8 9 ^ 5 4 3 2 1 0
比较: 6 7 8 9 5 4 3 2 1 0
-----------------------------------------------------
i=4时:
抽出元素: 5
序列: 6 7 8 9 ^ 4 3 2 1 0
比较: 5 6 7 8 9 4 3 2 1 0
... ...
一直到最后
序列为:
0123456789
这个应该向楼主建议差不多。
#include<stdio.h>
main()
{
int b,f,i,k;
static a[10]={9,8,7,6,5,4,3,2,1,0};
for(i=1;i<=9;i++)
{
b=a[i];
for(k=i-1;k>=0;k--)
{if(b<a[k])
a[k+1]=a[k];
else
break;}
a[k+1]=b;
}
for(f=0;f<10;f++)
printf("%d",a[f]);
return 0;
}
这个应该向楼主建议差不多。
#include<stdio.h>
main()
{
int b,f,i,k;
static a[10]={9,8,7,6,5,4,3,2,1,0};
for(i=1;i<=9;i++)
{
b=a[i];
for(k=i-1;k>=0;k--)
{if(b<a[k])
a[k+1]=a[k];
else
break;}
a[k+1]=b;
}
for(f=0;f<10;f++)
printf("%d",a[f]);
return 0;
}
会出现错误