算法思想
从数组第1位开始遍历(数组下标从0开始,设排序为升序排列),备份 当前下标的值,遍历该下标之前的元素,若该元素的值比备份下标的值大,则该元素向后移动一位,接着判断前一个元素;若该元素的值比备份下标的值小,则该元素不做处理。代码实现如下:
//升序直插排序
#include <stdio.h>
#include <malloc.h>
void insert_sort(int *a, int len);
int main(void)
{
int i;
int len;
int * a;
printf("请输入要排序的元素的个数:");
scanf("%d",&len);//存储要排的数的个数
a = (int *)malloc(len * sizeof(int));//动态定义内存
printf("请输入要排的数:\n");
for (i = 0; i < len; i++) { //要排的数的输入
scanf("%d",&a[i]);
}
insert_sort(a, len);
printf("升序排列结果为:\n");
for (i = 0; i < len; i++) { //排序后结果的输出
printf("%d\t",a[i]);
}
return 0;
}
void insert_sort(int *a, int len)
{
int i;
int j;
int temp;
for (i = 1; i < len; i++) {
temp = a[i]; //备份当前下标的值
j = i - 1;
while (j >= 0 && a[j] > temp) { //在数组内且值大于当前下标的值
a[j + 1] = a[j]; //该元素向后移动一位
j--; //
}
a[j+1] = temp; //插入该元素
}
}