Linux C直接插入排序算法实现

直接插入排序思想是将待排序元素一个一个插入到已排序队列:由于一个元素不存在排序,因此从第二个元素起,将第二个元素之前的元素(也就是第一个元素)看成是已排序队列,将第二个元素与已排序队列比较,找到合适位置并插入;依此类推,将剩下元素插入到已排序队列,完成排序。

时间复杂度:O(N^2)

稳定性:稳定

注:时间复杂度与选择(冒泡)排序一样,而代码逻辑看起来比选择(冒泡)排序难理解。

测试结果:

    待排序:6    3    4    2    5    1

    升序:1    2    3    4    5    6

   降序: 6    5    4    3    2    1

   

源码(insert_sort.c):

#include <stdio.h>

#define ARRAY_N 6

int array[ARRAY_N]={6, 3 , 4, 2, 5, 1};


int show_list(int array[], int n)
{
    int i = 0;

    for (i=0; i < ARRAY_N; i++)
    {

        printf("%5d", array[i]);
    }

    printf("\n");

    return 0;
}

int insert_sort_asc(int array[], int n)
{
    int i = 0;
    int j = 0;
    int k = 0;
    int tmp = 0;

    for (i = 1; i < n; i++)
    {
        for (j = i - 1; j >=0; j--)
        {
            if (array[i] > array[j])
            {
                break;
            }
        }

        if (j != i - 1)
        {
            tmp = array[i];
            for (k = i - 1; k > j; k--)
            {
                array[k + 1] = array[k];
            }

            array[k + 1] = tmp;
        }

    }



    printf("\n");

    return 0;
}


int insert_sort_des(int array[], int n)
{
    int i = 0;
    int j = 0;
    int k = 0;
    int tmp = 0;

    for (i = n - 2; i >=0 ; i--)
    {
        for (j = i + 1; j < n; j++)
        {
            if (array[i] > array[j])
            {
                break;
            }
        }

        if (j != i + 1)
        {
            tmp = array[i];
            for (k = i + 1; k < j; k++)
            {
                array[k - 1] = array[k];
            }

            array[k - 1] = tmp;
        }

    }


    printf("\n");

    return 0;
}

int main(void)
{
    show_list(array, ARRAY_N);

    insert_sort_asc(array, ARRAY_N);

    show_list(array, ARRAY_N);

    insert_sort_des(array, ARRAY_N);

    show_list(array, ARRAY_N);

    return 0;
}

猜你喜欢

转载自blog.csdn.net/szkbsgy/article/details/82259472