学习C语言一周了。上班比较忙,周末来多写点代码。
这一篇来实现个插入排序
逻辑比较简单。首先输入一个n,代表接下来要输入n个数,然后调用input输入n个数。接下来sort排序,再用output输入排序后的序列,释放内存,退出。
主要讲一下sort函数,首先程序认定初始序列中的第一个数是有序的。
然后取第二个数,如果第二个数小于之前的第一个数就把第二个数放在第一个数的前面,这样前两个数就变成有序的了
再取第三个数,如果第三个数小于第一个数就插入到第一个数之前,否则再比较第二个数,如果小于第二个数则插入到第二个数之前,否则不动。这样前三个数就有序了。
抽象成代码,一开始默认下标为0的数是有序的。然后依次对之后的数字排序。
看代码
#include <stdio.h>
#include <stdlib.h>
int *input(int n)
{
int *p = (int*)malloc(n * sizeof(int));
while (n--)
{
scanf("%d", p + n);
}
return p;
}
int output(int *p, int n)
{
while (n--)
{
printf("%d ", p[n]);
}
printf("\n");
return 0;
}
int move(int *p, int n)
{
int i, t;
t = p[n - 1];
while (--n)
{
p[n] = p[n - 1];
}
*p = t;
return 0;
}
int sort(int *p, int n)
{
int i, j;
for (i = 1; i < n; i++)
{
for (j = 0; j < i; j++)
{
if (p[i] < p[j])
{
move(p + j, i + 1 - j);
}
}
}
return 0;
}
int main(int argc, char *argv[])
{
int n;
int *p;
int i;
scanf("%d", &n);
p = input(n);
sort(p, n);
output(p, n);
free(p);
return 0;
}