如何找出数组中第k个最小的数

方法一:排序法

最容易想到的方法就是对数组进行排序, 排序后的数组中第k-1个位置上的数字即为数
组的第k个最小的数(原因是数组下标从0 开始计数),这种方法最好的时间复杂度为
O(nlogn)。

方法二:“剪枝”法

找一个标签,比标签小的都放左边,比标签大的都放右边,如果标签最终的位置为k-1,则找到了,如果位置小于k-1,右半部分继续用标签来找,否则左半部分用标签来找,递归下去。

	public static int method(int[] a, int low, int high, int k) {
		int i = low;
		int j = high;
		int flag = a[i];
		while (i < j) {
			while (a[j] >= flag && i < j) {
				j--;
			}
			if (i < j) {
				a[i] = a[j];
				i++;
			}
			while (a[i] <= flag && i < j) {
				i++;
			}
			if (i < j) {
				a[j] = a[i];
				j--;
			}
		}
		a[i] = flag;
		if (i == (k - 1)) {
			return flag;
		} else if (i < (k - 1)) {
			return (method(a, i + 1, high, k));
		} else {
			return (method(a, low, i - 1, k));
		}
	}

	public static int method(int[] a, int k) {
		int len = a.length;

		return method(a, 0, len - 1, k);
	}

	public static void main(String[] args) {
		int a[] = { 1, 5, 2, 6, 8, 0, 6 };
		int x = method(a, 4);// 5
		System.out.println(x);// 5
	}
发布了58 篇原创文章 · 获赞 0 · 访问量 982

猜你喜欢

转载自blog.csdn.net/Mason97/article/details/104559030
今日推荐