插入排序

减治法思想,通过对较小已排序数组的扩充,得到整体有序。对于少量元素的排序,它是一个有效的算法。算法保证在对第j个元素进行排序时,前面的[0,...,j-1]已有序。

效率:
在最好情况下,待排序数组已有序,此时算法属于O(N)。
在最坏情况下,待排序数组已反向排序,此时算法属于O(N^2),此时和比较排序的效率相同。
如果输入基本有序,则该算法运行很快,这使它优于一些基本排序,例如:选择排序和冒泡排序。

代码:
#include <stdio.h>

void InserSort(int *array, unsigned int n)
{
int i, j;
int temp;

/* 排列n个数要进行n-1趟比较 */
for (i = 1; i < n; i++)
{
temp = array[i];

for (j = i-1; j >= 0 && array[j] > temp; j--)
array[j+1] = array[j];

array[j+1] = temp;
}
}

int main(void)
{
int i;
int array[] = {34, 8, 64, 51, 32, 21};
int len = sizeof(array)/sizeof(array[0]); /* 整形数组大小计算方法 */

InserSort(array, len);

for (i = 0; i < len; i++)
printf("%d ", array[i]);

printf("\n");

return 0;
}


参考:
《算法导论》 P9-P16.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值