直接插入排序(insert sort)

功能:对一组数进行排序。

基本思想:把待排数据中的数据一个一个插入以排好序的序列中,使整个数据成有序序列,如下图所示。

(图片来源于维基百科)

算法实现思想:有两个已知序列A,B,A为一组以排好序的数据,B为一组未排序数据。首先让A中只有一个数据,那么A必定为有序的,然后从B中逐个取出数据,插入A中,让A始终保持有序,知道B中的数据被取完,则A中的数据必定为有序的。

 

#include <stdio.h>

void insertion_sort(int array[], int first, int last)
{
    int i, j , k , x;
    int z;
    for(i = 1; i < last; i++)
    {
        k = array[i];
        z = i;
        for(j = i - 1; j >= 0; j --)
        {
            if(array[j] >= k)
            {
                 for(x = z-1; x >= j; x--)
                 {
                       array[x + 1] = array[x];
                 }

                 array[j] = k;
                 z --;
            } else
            {
                break;
            }
        }
    }
}
                

void main()
{
    int a[20];
    int i = 0;
    int j;
    int k = 0;

    printf("请输入要排序的数");
    while(1)
    {
           scanf("%d", &j);
           if(j == 0)
           {
               break;
           }
           a[i] = j;
           k++;
           i++;
    }
    insertion_sort(a, 0, i);

int z;
    for(z = 0;z < i; z++)
    {
        printf("%d ", a[z]);
    }
    printf("\n");
}

时间复杂度:O(n2)

用途:数据量较小。

转载于:https://www.cnblogs.com/xiongge/p/3493984.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值