排序------直接插入排序

直接插入排序(Straight Insertion Sort)是一种最简单的排序方法,其基本操作是将一条记录插入到已排好的有序表中,从而得到一个新的、记录数量增1的有序表。

排序思想:

有一组数据待排序,排序区间为Array[0]~Array[n-1]。将数据分为有序数据和无序数据,第一次排序时默认Array[0]为有序数据,Array[1]~Array[n-1]为无序数据。

遍历无序区间的所有元素,每次取无序区间的第一个元素Array[i],将其和有序区间的元素进行比较,将Array[i]插入到有序区间的合适位置。

时间复杂度:O(n^2);

稳定性:稳定。

#include<stdio.h>
#include<stdlib.h>

int *Array;              /*Array是一个地址,指向数组的首地址。*/
int Count;               /*Count用来存储所要排序的数字的数目。*/

/*建立未排序数组*/
void CreateArray()
{
	int i;

    /*创建数组必须用常量分配,而我们事先并不知道要处理的数据个数,所以用malloc动态分配数组单元。*/
	Array = (int *)malloc(sizeof(int)*Count);   
	
	for (i = 0; i < Count; i++)
	{
		printf("Please enter an integer of NO.%d to sort:\n",i+1);
	    scanf("%d",&Array[i]);
	}
}

/*输出已排序数组*/
void Print()
{
	int i;
	for (i = 0; i < Count; i++)
	{
		printf(" %d ",Array[i]);
	}
	printf("\n");
}

/*直接插入排序升序*/
void StraightInsertSortup()
{
	int i,j,x;
	for (i = 1; i < Count; i++)
	{
		x = Array[i];

		/*升序排序*/
		for (j = i - 1; j > -1 && Array[j] > x; j--)
		{
			Array[j+1] = Array[j];
		}
		Array[j+1] = x;
	}
}

/*直接插入排序降序*/
void StraightInsertSortdown()
{
	int i,j,x;
	for (i = 1; i < Count; i++)
	{
		x = Array[i];

		/*降序排序*/
		for (j = i - 1; j > -1 && Array[j] < x; j--)
		{
			Array[j+1] = Array[j];
		}
		Array[j+1] = x;
	}
}


int main(void)
{
	int i;
	printf("Please enter the number of Numbers to sort:\n ");
	scanf("%d",&Count);
	CreateArray();             /*创建数组用来存储将要排序的数。*/

	StraightInsertSortup();          /*直接插入排序升序排列*/
        printf("升序排列\n");
        Print();                         /*打印已排序数组*/

        StraightInsertSortdown();        /*直接插入排序降序排列*/
        printf("降序排列\n");
        Print();                         /*打印已排序数组*/
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值