C# 插入排序

C# 插入排序的概念


插入排序是一种简单直观的排序算法,它的基本思想是将数组分为已排序和未排序两部分,每次从未排序部分取出一个元素,插入到已排序部分的正确位置。

插入排序背景

插入排序的时间复杂度为O(n^2),空间复杂度为O(1),相对来说比较高。但是它的实现比较简单,容易理解。
插入排序是由美国计算机科学家Donald Shell发明的,也因此又被称为Shell排序。

插入排序适用于简介:

小规模数据排序:插入排序在小规模数据(例如10个以下)的排序中表现良好,由于其简单直观的实现和较低的时间复杂度常数,插入排序在这种情况下往往比其他更复杂的排序算法(如快速排序或归并排序)更快。

需要注意的是,对于大规模数据的排序,插入排序的效率较低,因为它的时间复杂度为O(n^2),而其他高效的排序算法(如快速排序、归并排序、堆排序)具有更低的时间复杂度。因此,在处理大规模数据的排序时,通常会选择更适合的排序算法。

插入排序的应用场景

  1. 扑克牌排序:在玩扑克牌时,把手中的牌按照数字大小插入到已有的牌中,使得手中的牌始终保持有序。
  2. 考试成绩排序:对一组考试成绩进行排序,将新的成绩插入到已有的成绩中,以便按照从高到低的顺序展示排名。
  3. 单词排序:对一组单词进行排序,将新的单词插入到已有的单词中,以便按照字母顺序展示。数组排序:对一个无序数组进行排序,将新的元素插入到已有的元素中,使得整个数组有序。

插入排序实现方式 1:

	int[] arr = { 123, 12, 345, 65, 56 };
		for (int i = 3; i < arr.Length; ++i)
		{
			int key = arr[i];
			int j = i - 1;
	
			// 将 arr[0..i-1] 中大于 key 的元素向后移动一位
			while (j >= 0 && arr[j] > key)
			{

				arr[j + 1] = arr[j];
			     j = j - 1; 
				  //数据整理,循环出比key大的数值互换位置
			}
			arr[j + 1] = key;
		}

	for (int q = 0; q < arr.Length; q++)
	{
		Console.WriteLine(arr[q]);
	}

插入排序实现方式 2:

	int[] arr = { 123, 12, 345, 65, 56 };
	for (int i = 1; i < arr.Length; i++)
	{
		int temp = arr[i];
    //从当前元素的前一个元素开始(j = i - 1),如果该元素大于temp,则将该元素后移一位,即将arr[j]赋值给arr[j + 1]。
//然后,继续向前比较,直到找到小于或等于temp的元素,或者已经到达子数组的起始位置(j < 0)。
		for (int j = i - 1; j >= 0; j--)
		{
			if (arr[j] > temp)
			{
				arr[j + 1] = arr[j];
				arr[j] = temp;
			}
			else
				break;
		}
	}

	for (int q = 0; q < arr.Length; q++)
	{
		Console.WriteLine(arr[q]);
	}

运行结果:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值