关于数组排序法的学习记录

2024年9月27日学习了数组排序法中的冒泡排序法和插入排序法。实现代码如下所示:

//成绩公布单 
//输入12名同学每个人的总成绩,输出由高到低排序后的成绩

int main()
{
	int i = 0;
	int a[5] = { 0 };
	//int j = 0;
	int iTemp = 0;
	int iPos = 0;
	
	printf("请输入成绩:\n");

	for (i = 0; i < 5; i++)
	{
		printf("a[%d] = ",i);
		scanf("%d", &a[i]);
	}
	//冒泡排序法
	//for (i = 1; i < 5; i++)
	//{
	//	for (j = 4; j >=i; j--)
	//	{
	//		if (a[j] > a[j - 1])
	//		{
	//			iTemp = a[j-1];
	//			a[j - 1] = a[j];
	//			a[j] = iTemp;
	//		}
	//	}
	//}

	//拆入排序法
	for (i = 1; i < 5; i++)
	{
		iTemp = a[i];
		iPos = i - 1;
		while ((iPos >= 0) && (a[iPos] < iTemp))
		{
			a[iPos+1] = a[iPos];
			iPos--;
		}
		a[iPos+1] = iTemp;
	}


	for (i = 0; i < 5; i++)
	{
		printf("%d\t", a[i]);
		if (i == 3)
		{
			printf("\n");
		}
	}

	return 0;
}

冒泡排序法

	冒泡排序法
	for (i = 1; i < 5; i++)
	{
		for (j = 4; j >=i; j--)
		{
			if (a[j] > a[j - 1])
			{
				iTemp = a[j-1];
				a[j - 1] = a[j];
				a[j] = iTemp;
			}
		}
	}

下面我说一下我对这段代码的理解,当i=1时,进行第一轮的冒泡排序,从最后一个数组元素a[4]开始依次向前进行比较,如果遇到前面元素小于自身则互换两个元素位置,否则不变。第一轮交换完之后,第一个元素为该数组所有元素最大值,即a[0]=MAX。所以第二轮i++,只用比较剩余i-1个元素即可,比较方法同第一轮相同,后一个元素如果比前一个元素大,则两元素位置互换,否则不变,第二轮变完后前两个顺序就排完了,依次类推。

插入排序法

	for (i = 1; i < 5; i++)
	{
		iTemp = a[i];			//设置插入值
		iPos = i - 1;			//插入值前一个位
		while ((iPos >= 0) && (a[iPos] < iTemp))  //插入值前一个值小于插入值
		{
			a[iPos+1] = a[iPos];				//前一个元素后移腾出位置
			iPos--;								//继续与前一个值比较
		}
		a[iPos+1] = iTemp;						//不满足while条件时,即要么iPos<0,要么a[iPos]>iTemp 赋值
												//把腾出的位置给iTemp
	}

关于我对插入排序法的理解是这样子的,当i=1时,将i=1存储起来给iTemp赋值,然后拿iTemp与a[0]进行比较,如果a[0]<iTemp则将a[0]的值赋给a[1],iPos--,此时iPos为-1小于0所有不满足循环条件,直接退出循环,将iTemp的值赋值给a[0]完成第一轮排序,接下来都是这种排序方式。再以i=3时为例吧,先将a[3]元素的值赋给iTemp,然后与前一个元素值进行比较,如果前一个元素比iTemp的值小则a[2]元素的值赋给a[3]就像往后移动了一格一样,iPos减1此时iPos=1,接下来继续向前进行比较如果此时a[1]的值大于iTemp则循环结束,跳出循环体,然后将iTemp的值赋给a[2],完成排序。

以上就是我对冒泡排序和插入排序的理解,如果有误请各位老师批评指正,谢谢。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值