数据结构的排序——1.直接插入排序

1.依次插入排序

        依次插入指的是在一个有序数组当中依次插入一个新的数据,这样在所有的数据都插入之后,这个数据就是一个有序的数组了。另外依次插入数据排序的思想和我们玩扑克牌时依次拿牌后整理牌的思路很是相似。

将其抽象到咱们的排序当中就是如下的思路:

例如我们要在2 3 6 8当中插入5这个数据时,我们的排序的思路将是如下面图所示

 

         让我们来看看上面的四步排序,我们将尾部的数据数组下标记作end,首先我们将5和尾部数据8进行比较,由于8大于5所以将8和5的位置进行交换,然后将尾部的end减1,此时end的位置上的数据就是6,然后我们拿6和5进行比较,然后将6和5的位置进行交换,end减1,重复上述的步骤,直到整个数组排成有序的数组。

代码展示如下:

void DirectSort(struct information* ps,int x)
{
	int end = ps->size - 1;
	while (end >= 0)
	{
		if (ps->head[end] > x)
		{
			ps->head[end + 1] = ps->head[end];
			end--;
		}
		else
		{
			break;
		}
	}
	ps->head[end + 1] = x;
}

2.整个数组进行插入排序

        整体进行插入排序是和依次插入排序进行相比较来讲的,他是整个数组的数据都已经就位,然后再将整个数据进行插入排序。拿刚刚提到的扑克牌来讲,就是此时所有的牌都已经拿到手了,这时就需要将整体进行插入排序了。

例如我们就拿9 1 2 5 7排序来进行举例:

         首先将第一个数据的下标记作end,然后将第二个数和第一个数进行比较,看是否需要进行交换,然后将end加1,然后依次进行下去。

代码的展示如下:

#include<stdio.h>
void swap(int* front, int* back)
{
	int middle = *front;
	*front = *back;
	*back = middle;
}

void DirectSort(int* pHead,int size)
{
	for (int i = 0; i < size-1; i++)
	{
		int end = i;
		while (end >= 0)
		{
			if (pHead[end + 1] < pHead[end])
			{
				swap(&pHead[end], &pHead[end + 1]);
				end--;
			}
			else
			{
				break;
			}
		}
	}
}

void Print(int* pHead,int size)
{
	for (int i = 0; i < size; i++)
	{
		printf("%d ", pHead[i]);
	}
	printf("\n");
	
}

int main()
{
	//定义数组
	int DirectArr[10] = { 9,6,3,8,5,2,7,1,4,5 };

	//求取数组的长度
	int size = sizeof(DirectArr) / sizeof(DirectArr[0]);

	//排列之前的数组
	Print(DirectArr, size);

	//直接排序函数
	DirectSort(DirectArr,size);

	//排列之后的数组
	Print(DirectArr,size);


	return 0;
}

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值