直接插入排序是一种稳定的排序算法,适合于要进行排序的序列基本有序或数据较少的情况
#include <stdio.h>
#include <stdlib.h>
/*
直接插入排序的核心代码思想:
从第二个元素开始,一直与前面的元素对比
要把待插入的元素保存起来,从后往前遍历时,大的元素往后移动的时候就不会覆盖掉
*/
/*
按升序的方式递增
假设当前序列为 2,4,7,6
*/
void sort(int* a,int n)
{
int j = 0; //用来表示已排好序的元素的最后一个元素
int key = 0; //保存待插入的元素
for(int i = 1; i < n; i++)
{
key = a[i];
j = i - 1; //j是key前面那个元素
//从后往前遍历,寻找待插入位置,直到找到比key小的元素
while(j >= 0 && a[j] > key)
{
a[j+1] = a[j];
j--;
}
//出循环之后就把大的元素放后面去了,这时候把key插回来
a[j+1] = key; //j和key永远相差1,因为j--后出循环j和key的位置已经相差2了
}
}
int main()
{
int n;
printf("请输入数组长度:\n");
scanf("%d",&n);
int* a = (int*)malloc(sizeof(int));
printf("请输入数组元素:\n");
for(int i = 0; i < n; i++)
{
scanf("%d",&a[i]);
}
sort(a,n);
//排完序之后的序列(升序)
printf("排序后的序列为:\n");
for(int i = 0; i < n; i++)
{
printf("%d ",a[i]);
}
putchar('\n');
free(a);
return 0;
}
运行结果如下: