统考408 2021年数据结构真题Java实现

package com408;

/*使用某个排序算法*/
public class Test2021 {

	int i,j;
	public static void main(String[] args) {
		//调用compareSort方法
		int[] a={25,-10,25,10,11,19};
		int[] array1={1,1,1,2,2,3};
		int[] array2={3,2,2,1,1,1};
		int[] b=new int[6];
		compareSort(array1, b, 6);
	}
	
	//此时需要进行传入的是两个数组 并且在传入的过程中需要将数组的长度进行传入
	public static void compareSort(int a[],int b[],int n) {
		int[] count=new int[n];
		
		//这里定义一个变量 作用就是为了记录循环进行多少次比较 这样可以方便之后进行count长度的比较
		int numberCount=0;
		
		System.out.println("初始化操作之后的count数组为==>");
		for (int i = 0; i < n; i++) {
			//对count数组中的元素进行初始化操作
			count[i]=0;
			System.out.print(count[i]+" ");
		}
		System.out.println();
		System.out.println("初始化操作结束,开始进行下一步的操作");
		
		//首先对传入的数组a进行遍历操作
		System.out.println();
		System.out.println("首先对传入的数组a进行遍历操作");
		for (int i = 0; i < a.length-1; i++) {
			System.out.print(a[i]+" ");
		}
		System.out.println();
		System.out.println("++++++++++++++++++++++++++++++++++++++++++");
		for (int i = 0; i < n-1; i++) {
			for (int j = i+1; j < n; j++) {
				System.out.println("*************************************************");
				System.out.println("在本轮操作中,对应的a[i]和a[j]的值分别是:");
				System.out.println("a[i]="+a[i]);
				System.out.println("a[j]="+a[j]);
				if (a[i]<a[j]) {
					System.out.println("此时a[i]<a[j]需要进行count[j]++操作");
					count[j]++;
					System.out.println("此时的count[j]对应的值是:"+count[j]);
				}else{
					System.out.println("此时a[i]>=a[j]需要进行count[i]++操作");
					count[i]++;
					System.out.println("此时的count[i]对应的值是:"+count[i]);

				}
				numberCount++;
			}
		}
		//开始对数组b中的元素进行赋值操作
		System.out.println("本次执行需要进行比较次数是:"+numberCount);
		
		
		System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
		System.out.println("开始对数组b中的元素进行赋值操作");
		System.out.println("单元测试:打印数组b中的所有元素的值");
		System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");

		for (int i = 0; i < n; i++) {
			b[count[i]]=a[i];
			System.out.print("数组b中所有元素对应的下标的值为:"+count[i]+" ");
			System.out.println("遍历数组b得到===>"+b[count[i]]);
			
		}
		System.out.println("&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&");
		//最后在c语言中调用free函数将对应的count数组中的元素进行删除操作
		
	}
}

最终测试结果

数组b中所有元素对应的下标的值为:2 遍历数组b得到===>1
数组b中所有元素对应的下标的值为:1 遍历数组b得到===>1
数组b中所有元素对应的下标的值为:0 遍历数组b得到===>1
数组b中所有元素对应的下标的值为:4 遍历数组b得到===>2
数组b中所有元素对应的下标的值为:3 遍历数组b得到===>2
数组b中所有元素对应的下标的值为:5 遍历数组b得到===>3

关于算法的稳定性的相关问题

第三问中的问题
关于算法稳定性的修改
i < j,按这个逻辑,前面的会计数count[i]++,
最后就是 count[0] = 1, count[1] = 0,逆序了
要稳定的话,应该是 if(a[i] <= a[j]) count[j]++;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值