#include<stdio.h>
int main()
{
int arr[10] = {1,3,5,7,9,2,4,6,8,10}; //随便打的
int i,j,temp; // i j 是引用下标的 temp 是用来表示不变的"比数"
for(i = 0;i<10;i++) // 从第二个元素开始比 到最后(9)一个元素
{
temp = arr[i]; //temp 是用来表示不变的"比数" temp发挥关键
for(j = i - 1;j >= 0 && temp < arr[ j ];j--) //i-1 表示 会变的被比数 j >= 0表示不让下标越界
{
arr[j+1] = arr[j]; //j+1 不能 换成 i 自己思考!!! 因为 i+1表示temp此时的下标(改变过的)
arr[j] = temp; //替换...
}

}

for(i = 0;i<10;i++) //排好了打印
{
printf("%d\n",arr[i]);
}
return 0;
}

上面是代码 细心看注释 跟着逻辑走 :  要注意 temp  是干什么的 还有替换那里  j+1  为什么不能换成  i  

其实temp就比如下图每次要和别人比较的数  "j+1" 就如下图每次 temp 的位置。

细心看代码 和代码注释 , 写法很多种 ,这个是之一。 smile^—^

 

GIF动图来源: @五分钟学算法---侵权必删---

C程序数组算法 — 插入法排序(细心看)_i++


作者:​​咸瑜​​​​