第一次写文章 嘿嘿不讲武德哈 朋友们
今天分享本人才搞明白的直接排序法,希望能为和我一样被C语言杀头的小伙伴们提供一点帮助。
直接排序法本质是根据已有的有序数据来判定我后来插入的数据在其中排行的位次。我看了网上大都是将数据放在数组前面,然后通过数据向后移一位的方法,来改变名次。这当然可以而且也符合我们输入数据的常规思路,那么能不能我左移数据呢?我思考了一下应该可以,但是你前面必须留有足够的数据空来提供左移的空间,有兴趣的年轻人可以偷袭一下哈。这里我还是来讲解传统功夫哈。
废话不多说上代码讲解一下哈。
`#include<stdio.h>
int a[20];//全局变量//void InputArray() //输入的函数编写,比较简单就不讲了//
{int i;
printf("请输入数据\n");
for(i=0;i<=9;i++)
{
scanf("%d",&a[i]);
}}
void outputArray() //输出函数//
{int i;
for(i=0;i<=9;i++)
printf("%d ",a[i]);
}
void insert(int i) //整个插入法就是通过k来转接整个数据的操作//
{
int k; //
int j=i-1;
k=a[i]; //注意k=a[i];是点睛之笔为什么这么说,是因为我可以不用a[i]的空间了,因为a[i]的值被k保存了,这就是重新用另外一个变量的好处,这个要记得,我在以往实验题目中多次看到这的运用,虽然我也在摸索,但是这个是非常好滴。//
/ /j之所以使用i-1;是为了再向后转让时不占用其他数, 只占用a[i]的空间,但是a[i]的值被保存了,故无需担心,这就是k的意义//
while(j>=0&&k<a[j])
{
a[j+1]=a[j];
j–;
}
a[j+1]=k;
//
为什么是j+1;是因为你这个循环结束后j的值-1,此时并不是我想要的位置,而是我想要位置的前一位,这里可以画画来看看。//
//看到没 如果没有k来存储你一开始插入的数据,那一排序原有a[i]的值便找不到了。//
}
void sort()
{ int i;
for(i=1;i<=9;i++)
{
insert(i); //这里是函数的调用//
}
}
int main()
{
InputArray();//这里是函数的调用//
sort();
outputArray();//这里是函数的调用//
return 0;
}`
好了,就到这里吧,我还得继续做C语言题目了嘿嘿,加油,人上人!!!!!!!
















