先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个序列有序为止。
#include <stdio.h>
#include <stdlib.h>
void insertion_sort(int *arr, int n)
{
for (int i = 1; i < n; i++)
{
int key = arr[i];
int j = i - 1;
while (j >= 0 && key < arr[j])
{
arr[j + 1] = arr[j];
j--;
}
arr[j + 1] = key;
}
}
void print_arry(int *arr,int n)
{
for (int i = 0; i < n; i++)
{
printf("%d ", arr[i]);
}
}
int main()
{
int n;
scanf_s("%d", &n);
int *arr = (int *)malloc(sizeof(int) * n);
if (arr == NULL)
{
return 1;
}
else
{
for (int i=0; i < n; i++)
{
scanf_s("%d", arr + i);
}
insertion_sort(arr, n);
print_arry(arr, n);
}
free(arr);
return 0;
}
使用了malloc函数动态开辟内存空间,最后记得要释放。
自定义了两个函数模块,一个是插入排序函数,一个是打印函数
结果