C 数据结构与算法系列 插入排序

参照 实验楼 插入排序代码
spa

它的作法是:每次从无序表中取出第一个元素,把它插入到有序表的合适位置,使有序表仍然有序。第一趟比较前两个数,而后把第二个数按大小插入到有序表中; 第二趟把第三个数据与前两个数从前向后扫描,把第三个数按大小插入到有序表中;依次进行下去,进行了(n-1)趟扫描之后就完成了整个排序过程,以下图所 示。code

下附实验代码排序

#include <stdio.h>
#include <stdlib.h>

int n;

/*
 * 直接插入排序(头几遍可能会晕 拿张纸画画就懂了 回头再看几遍确保理解透彻)
 */
void InsertSort(int *array)
{
    int i, j;
    for (i = 2; i <= n; i++)
    {
        if (array[i] < array[i - 1])
        {
            array[0] = array[i];
            array[i] = array[i - 1];
            for (j = i - 2; array[0] < array[j]; j--)
            {
                array[j + 1] = array[j];
            }
            array[j + 1] = array[0];
        }
    }
}

int main()
{
    int i;
    int *array;
    printf("Please enter the length of arr:\n");
    scanf("%d", &n);
    array = (int*) malloc(sizeof(int) * (n + 1));
    printf("Please enter each element(seperate by space):");
    for (i = 1; i <= n; i++)
    {
        scanf("%d", &array[i]);
    }

    InsertSort(array);
    printf("sorted array:");
    for (i = 1; i <= n; i++)
    {
        printf("%d ", array[i]);
    }
    printf("\n");
}
相关文章
相关标签/搜索