直接插入排序(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)

用途:数据量较小。

posted @ 2013-12-27 13:43  elroyzhang  阅读(246)  评论(0编辑  收藏  举报