#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动图来源: @五分钟学算法---侵权必删---
作者:咸瑜