直接插入排序。数组下标实现。

直接插入排序。

直接插入排序是所有排序中最简单的一种排序。在处理大数据量或者待排序列太无序的时候效率就变很低。

但是在待排序记录较少时直接插入排序凭借其简单易实现的优势又成功逆袭,威风八面。


直接插入排序的基本思想是将数组分为有序区和无序区,将无序区的元素依次和有序区的元素进行比较,然后插入到首个比其值小的元素后面。

为防止数组下标越界 常将数组首元素设为哨兵。

下面就是这“欺短怕长”的直接插入排序的一种数组索引实现方法。


#include <stdio.h>
#define 	MAX 	11

void Insert_Sort (int a[],int num);    //声明函数,形式参量为数组和元素个数。

int main (void)
{
	int i;
	int Array [MAX] = {0};             //初始化数组。
	puts ("Please enter 10 numbers:\n");

	for (i = 1; i < MAX;i++)
	{
		scanf ("%d",&Array[i]);        // 从a[1] 开始赋值。
	}

	Insert_Sort (Array,MAX);           //调用函数。

	for (i = 1;i < MAX;i++)
	{
		printf ("%d\n",Array[i]);      // 打印。
	}
	return 0;
}

void Insert_Sort (int a[],int num)
{
	int i,j;                           //声明数组的两个下标。

	for (i = 2;i < num;i++)            // 首先a[1]为有序区。所以从a[2]开始比较。
	{
		a[0] = a[i];                   //将待排序的元素的值赋给哨兵。
		for (j = i-1;a[0] < a[j];j--)  // 从待排元素的前一个元素开始往前比较。
		{
			a[j+1] = a[j];             //依次将大于a[0]的元素向后移。
		}

		a[j+1] = a[0];                 //把a[0]插入到a[j]的后一个位置。
	}
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值