废话不说先上代码
#include <stdio.h>
int main()
{
int len = 0;
int str[100] = {5,4,3,2,1};
while(str[len])
{
len++;
}
printf("%d\n",len);
int i;
int j;
int data;
for(i = 1;i < len;i++)
{
data = str[i];
j = i-1;
while(str[j] >= data)
{
str[j+1] = str[j];
j--;
}
str[j+1] = data;
}
for(i = 0;i <len;i++)
printf("%d",str[i]);
printf("\n");
return 0;
}
先说一下逻辑
插入排序的思想就是找出一个数组的数据(我们这里姑且找的是第二个元素)
然后再把原来数组里面的元素挨个比较大的放右边小的放左边
这一趟走完基本就排序好了
主要介绍一下核心代码 (到目前我其实也不是理解很深)
我们需要定义两个变量 i 和 j(等下会说)问题①
再定义一个data作为把数组提取出来盛放的容器
开始一个循环 当然这个循环一开始就是不完整的
从1到len-1 你会发现少了一个元素 问题②
继续看吧
刚开始的i= 1 是吧 也就是数组的第二个元素
提取出来放到data里面
j=i-1先这样看着 问题③
再来个判断条件 由于目前的i=1是吧
j就等于0了 我知道你有疑惑 看下去
str[j] >= data
这串代码的意思就是数组里面第二个数比第一个数大
大怎么办找你的上司呗 data的上司不就是str[i]吗
那就换换
就这样第二个数和第一个数换了
此时的j--是因为刚才的操作把一个数据放到了data数据(str[i])
的上一位 也就是放到左边了
所以要保证data的所带表的数据的位置不动 大的数据往右靠下的数往左靠