C语言-插入排序

插入排序经典代码如下:

#include
#include

//
void Swap(int* ap, int* bp)
{
    assert(ap != nullptr && bp != nullptr);
    int tmp = *ap;
    *ap = *bp;
    *bp = tmp;
}

void PrintAr(int* ar, int n)
{
    assert(ar != nullptr);
    for (int i = 0; i < n; ++i)
    {
        printf("%5d", ar[i]);
    }
    printf("\n");
}
void InsertSort(int* ar, int n)
{
    assert(ar != nullptr);
    if (n <= 1) return;
    for (int i = 1; i < n; ++i)
    {
        PrintAr(ar, n);
        if (ar[i - 1] > ar[i])
        {
            int j = i - 1;
            int tmp = ar[j + 1];
            do
            {
                ar[j + 1] = ar[j];
                j = j - 1;
            } while (j >= 0 && ar[j] > tmp);
            ar[j + 1] = tmp;
        }
    }
}
int main()
{
    int ar[] = { 23,56,90,78,67,100,12,45,34,89 };
    int n = sizeof(ar) / sizeof(ar[0]);

    InsertSort(ar, n);
    PrintAr(ar, n);

    return 0;
}

运行结果如下: 

C语言-插入排序_第1张图片

下面将举一个简单例子去介绍插入排序算法: 

插入排序


算法思想:直接插入排序是无序序列插入到有序序列中,通常假定a[0]为已经排好序的子序列,然后将剩下无序序列一个一个插入到有序的子序列中。适用于基本有序和数据量不大的情况。
例如对于一个无序序列{5,4,3,2,1}来讲,首先确定5为有序的,然后在无序序列中向右遍历,4小于5则插入到5的前面,再继续往右遍历,3小于5同时也小于4则应该插入到4的前面,依此类推直到得到有序序列。


无序序列:{ 5,4,3,2,1 };
第一趟:4 5 3 2 1
第二趟:3 4 5 2 1
...

直至  : 1 2 3 4 5

C语言的代码如下:

#include
#include


//5 4 3 2 1 
//4 5 3 2 1
//4 3 5 2 1
//3 4 5 2 1
//...
//1 2 3 4 5

int main()
{
    int arr[5] = { 5,4,3,2,1 };
    printf("排序后的结果为:\n");
    for (int i = 1; i < 5; i++)
    {
        int temp = arr[i];
        int j = i - 1;
        while (j >= 0 && arr[j] > temp)
        {
            arr[j + 1] = arr[j];
            arr[j] = temp;
            j--;
        }
    }
    for (int i = 0; i < 5; i++)
    {
        printf("%5d", arr[i]);
    }
    return 0;

}

运行结果如下:

C语言-插入排序_第2张图片

 

你可能感兴趣的:(C语言,c语言,算法,数据结构)