题目:给定n个元素和一个整数k,要求用O(n)时间找出这n个元素中第k小元素。
import java.util.Scanner; public class Main { static int kmin;// 第k小的数 static int knum;// 第k个数 public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()) { int n = scanner.nextInt(); int[] nums = new int[n]; for (int i = 0; i < n; i++) { nums[i] = scanner.nextInt(); } knum = scanner.nextInt() - 1;// -1是为了让knum表示的是数组下标 getKmin(0, n - 1, nums); System.out.println(kmin); } scanner.close(); } // 得到第k小的元素 private static void getKmin(int i, int j, int[] nums) { int temp = quickSort(i, j, nums); if (temp < knum) { getKmin(temp + 1, j, nums); } else if (temp > knum) { getKmin(i, temp - 1, nums); } else { kmin = nums[temp]; } } // 数组快速排序(一趟) private static int quickSort(int i, int j, int[] nums) { int key = nums[i]; while (i != j) { while (i < j && nums[j] > key) { j--; } if (i < j) { nums[i] = nums[j]; } while (i < j && nums[i] < key) { i++; } if (i < j) { nums[j] = nums[i]; } } nums[i] = key; // i记录下标位置 return i; } }
原文:http://blog.csdn.net/u011506951/article/details/34930581