插入排序其实就是斗地主

文章通过打斗地主的例子解释了插入排序的工作原理,从抓牌并按顺序排列的过程中,展示了如何进行插入和比较操作。接着给出了Java代码实现插入排序的详细过程,包括打印数组、交换元素的辅助函数,以及插入排序的核心逻辑。最后,文章提供了测试数据和运行结果,证明了算法的正确性。

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

插入排序

1.来打斗地主了哈哈哈

首先我们开始抓牌,底牌是 8 、 9 、 Q、5、 6、7 、5、 J 、K 、A (从左往右是从小到大)

第一张牌是 8,一张自然顺序是对的,手牌(8)

第二张牌是9,,需要与8比一下,发现比8大,不用动,手牌(8 、9)

第三张牌是Q,需要与9比一下,发现比9大,不用动,手牌(8、 9、Q)

第四张牌是5,需要与Q比一下,比Q小,那就交换位置手牌(8、 9、5、Q),5来到了Q的位置,继续比,以此类推,来到了第一张牌的位置,此时发现左边没有牌了,那这次插牌结束了,手牌(5、8、9、Q)

当抓到5、6、7、5、J、K都是一样的操作,目前手牌(5、5、6、7、8、9、J、Q、K)

还有最后一张A,也就是说第十张牌,需要与K比一下,比Q大,不用动,现在插牌就完成了,完成的次数和所有底牌(底牌也是10张)是一致的。

编程思路就有了呀:首先用一个for循环控制插第几张牌,然后for循环里面就是具体的插牌操作:首先与左边的牌比较,如果比左边小,那就交换,此时插的牌位置向左移了一个,以此类推,等到左边没有牌的时候就完成了。

2.具体代码实现:

package DoExercise;

public class InsSertSort{

	
	

	/**
	 * 打印数组
	 * @param arr
	 */
	public static void  printArr(int[] arr) {
		for(int i = 0; i < arr.length; i++) {
			System.out.print(arr[i]+" ");
		}
		System.out.println();
	}
	/**
	 * 交换两个数
	 * @param arr 
	 * @param i
	 * @param j
	 */
	private static void swap(int[] arr, int i, int j) {
		int temp = arr[i] ;
		arr[i] = arr[j];
		arr[j] = temp;
		
	}
	/**
	 * 插入排序
	 * @param arr
	 */
	private static void InsertSort(int[] arr) {
		if(arr  == null || arr.length < 2) {
			return;
		}
		//编程思路就有了呀:首先用一个for循环控制插第几张牌,
		//然后for循环里面就是具体的插牌操作:首先与左边的牌比较,如果比左边小,那就交换,此时插的牌位置向左移了一个,以此类推,等到左边没有牌的时候就完成了。
		int  N = arr.length;
		for(int i = 1; i < N;i++) {//首先用一个for循环控制插第几张牌,N为总牌数,从第一张开始,直到全部插完
			int pre = i;//保存当前位置
			while( pre - 1 >= 0 && arr[pre - 1] > arr[pre]) {//arr[pre - 1] > arr[pre]:如果比左边小,那就交换,pre - 1 >= 0 :而且保证左边都有牌才去交换
				swap(arr, pre, pre - 1);//如果比左边小,那就交换
				pre--;//此时插的牌位置向左移了一个
			}
		}
		
	}

	public static void main(String[] args) {
		int[]  arr = {5,4,3,2,1};//1.定义测试数据
		printArr(arr);  //2.打印测试数据
		InsertSort(arr);//3.进行插入排序
		printArr(arr);  //4..打印排序后数据数据
		
	}
	

}

3.运行效果

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值