数据结构学习(十三)——插入排序

本文介绍了一种简单的排序算法——插入排序,通过类比打扑克的过程来解释其原理,并提供了一个C语言实现的例子。插入排序适用于小规模数据排序,具有较低的空间开销。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

插入排序是简单排序的一种,其主要是对少量数据进行排序处理,大量数据时没有优势。插入排序就像打扑克,摸起一张牌看到然后按照手里的牌的顺序位置将此牌再插入到适当位置。是一种先确定数据,再确定位置的排序算法。与选择排序算法不同。

下面的代码实现了插入排序的简单练习。

#include <stdio.h>

#define MAXSIZE 50

int *Insert_sort(int *s, int n);

int main(void)
{
	int n, i;
	int s[MAXSIZE+1];		//多1个辅助元素

	printf("插入排序练习\n");
	printf("输入你想排序的数字个数:");
	scanf("%d", &n);
	getchar();
	printf("请依次输入待排序数据\n");
	for(i=1; i<n+1; i++)		//元素0作为辅助元素
	{
		scanf("%d", &s[i]);
	}

	Insert_sort(s, n);
	printf("排序好的数据输出为:\n");
	for(i=1; i<n+1; i++)
	{
		printf("%d ", s[i]);
	}
	printf("\n");
}

int *Insert_sort(int *s, int n)
{
	int i,j;

	for(i=2; i<n+1; i++)	//i下标代表选择的那个待排序的元素
	{
		s[0] = s[i];
		j = i - 1;			//j下标前面那部分代表以排序好那部分
		while(s[0] < s[j])
		{
			s[j+1] = s[j];	//元素后移
			j--;
		}
		s[j+1] = s[0];		//插入元素
	}
}

插入排序主要由两部分构成,一部分是比较操作,另一部分是移动操作。进行一次比较的工作量大些,移动工作量小些。

它的开销也小,只需要一个备用单元,就是程序中的数组下标0的元素。另外还需要两个辅助变量就是排序经常用到的i和j,对存储器资源比较紧张的嵌入式系统是适合的。

另外,插入排序的时间复杂度可以看出来与数据元素的多少成正比。其时间复杂度为O(n^2)。插入排序支持静态排序,也支持动态排序,就跟打扑克摸牌一样。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值