java 计数排序——三级版(内含思路,代码,注释)

计数排序:

三级版计数排序是对二级版计数排序的进一步优化,他不在对辅助数组进行双重循环扫描输入数字,而是用一种巧妙的方法对数组进行赋值。

代码思路:
略……(哈哈,我觉得我不一定准确的弄明白了,所以就不在这里误人子弟了,不过将上传一个视频链接供大家分享)

bilibili计数排序思路超链接(点击这里,有惊喜哦~)

代码如下:

public class 计数排序三级版 {

/**
 * @param args
 */
public static void main(String[] args) {
	// TODO Auto-generated method stub
	System.out.print("产生的随机数组如下:");
	int[] arr = gennerateArry(15, 1000, 1);
	for (int i : arr) {
		System.out.print(i + " ");
	}
	System.out.print("\n三级计数排序后的数组如下:");
	arr = countSort3(arr);
	for (int i : arr) {
		System.out.print(i + " ");
	}
}

/*
 * 产生数组长度为len,数组最大值可为max,数组最小值可为min的随机数组
 */
public static int[] gennerateArry(int len, int max, int min) {
	int[] arr = new int[len];
	for (int i = 0; i < arr.length; i++) {
		arr[i] = (int) (Math.random() * (max - min) + min);
	}
	return arr;
}

/*
 * 三级版计数排序
 */
public static int[] countSort3(int[] arr) {
	// 起初的思路、代码和二级版计数排序一样
	int max = arr[0];
	int min = arr[0];
	for (int i : arr) {
		if (i > max)
			max = i;
		if (i < min)
			min = i;
	}

	int[] help = new int[max - min + 1];
	for (int i : arr) {
		help[i - min]++;
	}
	// 从这里开始进行优化
	for (int i = 1; i < help.length; i++) { // 辅助数组中从第二个开始每个的下标内的数字是自己和前一个下标内的数字的和
		help[i] += help[i - 1];
	}

	int[] newArr = new int[arr.length];
	for (int i = newArr.length - 1; i >= 0; i--) { // 这里有点绕,详情可以看一段小视频,体会
		newArr[help[arr[i] - min] - 1] = arr[i];
		help[arr[i] - min]--;
	}
	return newArr;
}
}

在这里插入图片描述
总结:

学习计算机编程语言就是学习一种新的语言,和学习语文、英语一样,重在多用,多理解(读就不用了)加油!欧力给!

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值