直接插入排序

直接插入排序

https://www.cnblogs.com/guopengxia0719/p/10520561.html

C语言

#include <stdio.h>
int a[20];
void InputArraay()
{
    for (int i = 1; i <= 10; i++)
        scanf("%d", &a[i]);
}
void OutputArraay()
{
    for (int i = 1; i <= 10; i++)
        printf("%d ", a[i]);
}
//插入排序
//1.数据分为两部分,一开始有序部分包含1个元素
//2.依次将无序部分的元素插入到有序部分当中
void Insert(int i)
{
    int j = i - 1, k = a[i]; //j为当前下标, k为无序部分第一个元素
    while (j >= 1 && k < a[j])
    {                    //找到k元素在有序部分的位置
        a[j + 1] = a[j]; //循环的时候直接右移有序数组,为k腾出位置
        j--;             //不是k正确的位置,继续往前循环
    }
    a[j + 1] = k; //出来的时候j多减了1,要加回去
}
void Sort()
{
    //遍历无序部分,每次取出第一个元素
    for (int i = 2; i <= 10; i++)
    {
        Insert(i);
    }
}
int main()
{
    InputArraay();
    Sort();
    OutputArraay();
    return 0;
}