数据范围:1≤�≤1000 1≤n≤1000 ,输入的整数满足 1≤���≤10000 1≤val≤10000
输入描述:
第一行输入两个整数n和k
第二行输入一个整数数组
输出描述:
从小到大输出最小的k个整数,用空格分开。
示例1
输入:
5 2 1 3 5 7 2
复制输出:
1 2
冒泡排序
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNext()) { // 注意 while 处理多个 case
int a = in.nextInt();
int b = in.nextInt();
int[] nums = new int[a];
for(int i = 0; i < a; i ++) {
nums[i] = in.nextInt();
}
for(int i = a - 1; i >= 1 ; i --) {
for(int j = a - 1; j >= a - i; j --) {
if(nums[j] < nums[j - 1] ) {
int temp = nums[j];
nums[j] = nums[j - 1];
nums[j - 1] = temp;
}
}
// System.out.print(nums[i] + " ");
}
for(int i = 0; i < b; i ++) {
System.out.print(nums[i] + " ");
}
}
}
}
快速排序
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNext()) { // 注意 while 处理多个 case
int a = in.nextInt();
int b = in.nextInt();
int[] nums = new int[a];
for(int i = 0; i < a; i ++) {
nums[i] = in.nextInt();
}
QuickSort(nums, 0, a - 1);
for(int i = 0; i < b; i ++) {
System.out.print(nums[i] + " ");
}
}
}
public static void QuickSort(int[] arr, int start, int end) {
if(start > end) {
return ;
}
int i = start, j = end, base = arr[start];
while(i < j) {
while(i < j && arr[j] >= base) {
j --;
}
if(i < j) {
arr[i] = arr[j];
i ++;
}
while(i < j && arr[i] < base) {
i ++;
}
if(i < j) {
arr[j] = arr[i];
j --;
}
}
arr[i] = base;
QuickSort(arr, start, i - 1);
QuickSort(arr, i + 1, end);
}
}
归并排序
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNext()) { // 注意 while 处理多个 case
int a = in.nextInt();
int b = in.nextInt();
int[] nums = new int[a];
for(int i = 0; i < a; i ++) {
nums[i] = in.nextInt();
}
int[] temp = new int[a];
MergeSort(nums, 0, a - 1, temp);
for(int i = 0; i < b; i ++) {
System.out.print(nums[i] + " ");
}
}
}
public static void MergeSort(int[] nums, int start, int end, int[] temp) {
if(start == end) {
return ;
}
int mid = (start + end) / 2; //中间值
MergeSort(nums, start, mid, temp); //左边的树
MergeSort(nums, mid + 1, end, temp);
for(int i = start; i <= end; i ++) {
temp[i] = nums[i];
}
int i = start, j = mid + 1;
for(int k = start; k <= end; k ++) {
if(i == mid + 1) {
nums[k] = temp[j];
j ++;
} else if (j == end + 1) {
nums[k] = temp[i];
i ++;
} else if (temp[i] <= temp[j]) {
nums[k] = temp[i];
i ++;
} else {
nums[k] = temp[j];
j ++;
}
}
}
}
选择排序
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNext()) { // 注意 while 处理多个 case
int a = in.nextInt();
int b = in.nextInt();
int[] nums = new int[a];
for(int i = 0; i < a; i ++) {
nums[i] = in.nextInt();
}
int[] temp = new int[a];
ChangeSort(nums);
for(int i = 0; i < b; i ++) {
System.out.print(nums[i] + " ");
}
}
}
public static void ChangeSort(int[] nums) {
for(int i = 0; i < nums.length; i ++) {
int min = i;
for(int j = i + 1; j < nums.length; j ++) {
min = nums[j] < nums[min] ? j : min;
}
int temp = nums[i];
nums[i] = nums[min];
nums[min] = temp;
}
}
}
插入排序
import java.util.Scanner;
// 注意类名必须为 Main, 不要有任何 package xxx 信息
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
while (in.hasNext()) { // 注意 while 处理多个 case
int a = in.nextInt();
int b = in.nextInt();
int[] nums = new int[a];
for(int i = 0; i < a; i ++) {
nums[i] = in.nextInt();
}
int[] temp = new int[a];
InsertSort(nums);
for(int i = 0; i < b; i ++) {
System.out.print(nums[i] + " ");
}
}
}
public static void InsertSort(int[] nums) {
for (int i = 1; i < nums.length; i ++) {
int j = i - 1, val = nums[i];
while(j >= 0 && nums[j] > val) {
nums[j + 1] = nums[j];
j --;
}
nums[j + 1] = val;
}
}
}