[算法][选择问题]有一组N个数,确定其第k个最大者

有一组N个数,确定其第k个最大者

Java

  1. 将这N个数读进一个数组中,再通过冒泡排序法,以递减顺序将数组排序,然后返回位置k上的元素
// 降序
public static void bubbleSortDescending(int[] array) {
	// 数组长度
	int arrayLength = array.length;
	for (int i = 0; i < arrayLength; i++) {
		for (int j = 0; j < arrayLength - i - 1; j++) {
			if (array[j] < array[j + 1]) {
				int temp = array[j];
				array[j] = array[j + 1];
				array[j + 1] = temp;
			}
		}
	}
}
  1. 先将前k个元素读入数组并(以递减的顺序)对齐排序.接着,将剩下的元素再逐个读入.当新元素被读到时,如果它小于数组中的第k个元素则忽略,否则就将其放到数组中正确的位置上,同时将数组中的一个元素挤出数组
public static int[] selectionProblem(int[] array, int k) {
	// 数组长度
	int length = array.length;
	int[] arrayTemp = new int[] {};
	// 如果数组元素个数小于k值,则对数组直接降序排序
	if (length <= k) {
		bubbleSortDescending(array);
		arrayTemp = Arrays.copyOf(arrayTemp, length);
	} else { // 如果数组元素个数大于k值,则先复制数组前k个值
		arrayTemp = Arrays.copyOf(array, k);
		// 对复制出来的数组进行降序排序
		bubbleSortDescending(arrayTemp);
		for (int i = k ; k < length; i++) {
			// 如果原数组的第i个元素小于复制后数组的第k个元素,跳过
			if (arrayTemp[k-1] >= array[i]) {
				continue;
			} else {
				// To do
			}
		}
	}
	return arrayTemp;
}

public static void bubbleSortDescending(int[] array) {
	// 数组长度
	int length = array.length;
	for (int i = 0; i < length; i++) {
		for (int j = 0; j < length - i - 1; j++) {
			if (array[j] < array[j+1]) {
				int temp = array[j];
				array[j] = array[j+1];
				array[j+1] = temp;
			}
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值