留校第0天
插入排序
#include <stdio.h>
#include <stdlib.h>
#define maxn 10
int a[maxn];
int main()
{
int i,j,key;
for(i=0; i<maxn; i++)
scanf("%d",&a[i]);
for(j=1; j<maxn; j++)
{
key=a[j];
i=j-1;
while(i>=0&&a[i]>key)
{
a[i+1]=a[i];
i-=1;
}
a[i+1]=key;
}
for(i=0; i<maxn; i++)
printf("%-2d",a[i]);
printf("\n");
return 0;
}
算法导论书上留了个思考题,让修改程序使之降序排序。
偷懒版:
#include <stdio.h>
#include <stdlib.h>
#define maxn 10
int a[maxn];
int main()
{
int i,j,key;
for(i=0; i<maxn; i++)
scanf("%d",&a[i]);
for(j=1; j<maxn; j++)
{
key=a[j];
i=j-1;
while(i>=0&&a[i]>key)
{
a[i+1]=a[i];
i-=1;
}
a[i+1]=key;
}
for(i=9; i>=0; i--) //只需要修改这里就可以实现了。
printf("%-2d",a[i]);
printf("\n");
return 0;
}
正直版:
#include <stdio.h>
#include <stdlib.h>
#define maxn 10
int a[maxn];
int main()
{
int i,j,key;
for(i=0; i<maxn; i++)
scanf("%d",&a[i]);
for(j=1; j<maxn; j++)
{
key=a[j];
i=j-1;
while(i>=0&&a[i]<key) //这里修改成小于就可以了
{
a[i+1]=a[i];
i-=1;
}
a[i+1]=key;
}
for(i=0; i<maxn; i++)
printf("%-2d",a[i]);
printf("\n");
return 0;
}
之前看大神说过,算法嘛,就是要keep it simple and stupid.