插入排序法

废话不说先上代码

#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的所带表的数据的位置不动  大的数据往右靠下的数往左靠

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值