您的位置:首页 > 其它

直接插入排序(insert sort)

2013-12-27 13:43 344 查看
功能:对一组数进行排序。

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


(图片来源于维基百科)

算法实现思想:有两个已知序列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)

用途:数据量较小。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: