算法分析之插入排序——动态数组实现

插入排序,最简单的排序算法。本次采用动态数组实现。

1.申请动态数组空间

    printf("输入数组的大小length:\n");
	int length=0;
	scanf("%d",&length);
	/****动态分配内存初始化数组***********************/
	int * array = (int*)malloc(length * sizeof(int));

申请长度为length的int型数组array。
2.插入排序算法实现

void insert_sort(int array[],int length)
{
	int i,j,key;
	for(j=1;j<length;j++)
	{
		key = array[j];
		i = j-1;
		while(i>=0 && array[i]>key)
		{
			array[i+1] = array[i];
			i = i-1;
		}
		array[i+1] = key;
		print_array(array,length);
	}
}

原数组如下图:
输入的数组
第一次循环时:
j=1;i=j-1=0;key=array[1]=2;
因此,2、5交换
第一次循环
第二次循环:
j=2;i=j-1=1;key=array[2]=4;
while循环 i>=0 && array[i]>key为真(i=1;5>4):
执行array[i+1] = array[i];i = i-1;(i=0)
此时数组为:
while循环中数组情况
此时while循环为假,2<4,
所以执行array[i+1] = key;即array[1]=4;
此时数组为:
第二次循环执行完毕
此处不一一列举每次循环的过程了。最后给出运行的截图:
最后运行结果的实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值