十大排序之插入排序

简介: 十大排序之插入排序

前言:今天介绍的是十大排序中的算法

在生活中,我们经常会接触到一些不规则的数,我们需要通过自己的方法让他变得规则起来,其实这也就是所谓的排序,首先给大家先介绍一下最简单的插入算法吧

一、插入算法

首先什么是插入算法,大家应该都玩过扑克牌吧,那我们在玩扑克牌的时候我们首先拿到的牌应该都是杂乱无章的对吧?那么我们这个时候是不是应该把杂乱无章的牌变成有规律的牌呢?这就是插入算法

首先我们这里就讲的是升序插入的算法,首先这里的话我们需要定义一个变量end来充当尾部,那么end+1就是我们要插入的数据了,我们肯定不能直接把要插入的数据进行比较吧,因为这样会改变我们的数据,所以我们应该把数据用一个变量存储起来,就如下图一样


72e45cac2bb8439496d2a3cc5d5f97ac.png

我们的框架就已经搭建好了 ,其次因为我们这里讲的是升序的算法,所以说,只有当end>tmp的时候我们才需要让end往后面移动一个位置,就类似于下面的图片一样,就这样一直的移动,当我们的end<tmp的时候,就会停下来,然后再end+1的位置插入我们当前的数进去,这样就完成了插入,下面进行代码的演示!

f881fc4021bf4909b7ed8130c1a9c36e.png

二、使用步骤

1.代码实现

代码如下:

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
//插入排序
void InsertSort(int* a, int n)
{
    for (int i = 0; i < n - 1; i++)
    {
        int end = i;
        int tmp = a[end + 1];
        while (end >= 0)
        {
            if (a[end] > tmp)
            {
                a[end + 1] = a[end];
                --end;
            }
            else
            {
                break;
            }
        }
        a[end + 1] = tmp;
    }
}
void PrintArray(int* a,int n)
{
    for (int i = 0; i < n; i++)
    {
        printf("%d ", a[i]);
    }
    printf("\n");
}
void TestInsert()
{
    int a[] = { 3,5,2,4,8,7,9,1,0,8};
    InsertSort(a, sizeof(a) / sizeof(int));
    PrintArray(a, sizeof(a) / sizeof(int));
}
int main()
{
    TestInsert();
    return 0;
}

2.读入数据

代码如下(示例):

总结

好啦!今天的插入算法讲解完毕,接下来也会陆续的更新其他的十大算法哦!

目录
相关文章
|
机器学习/深度学习 算法 搜索推荐
八大排序(二)--------冒泡排序
八大排序(二)--------冒泡排序
40 1
|
7月前
|
搜索推荐 算法
【十大排序】带你深入了解归并排序
【十大排序】带你深入了解归并排序
|
机器学习/深度学习 搜索推荐 算法
八大排序(四)--------直接插入排序
八大排序(四)--------直接插入排序
55 0
|
算法 搜索推荐
八大排序--------(五)堆排序
八大排序--------(五)堆排序
38 0
|
机器学习/深度学习 搜索推荐
八大排序(三)--------简单选择排序
八大排序(三)--------简单选择排序
51 0
八大排序——快速排序
八大排序——快速排序
【八大排序(九)】计数排序-非比较排序法
【八大排序(九)】计数排序-非比较排序法
|
存储
八大排序之选择排序
八大排序之选择排序
9609 0
|
存储 搜索推荐 算法
八大排序之插入排序和归并排序
八大排序之插入排序和归并排序
175 0
|
存储 搜索推荐 算法
八大排序之交换排序与计数排序 1
八大排序之交换排序与计数排序
101 0