输入两个数n和m,n为需要排序的数的个数,m为冒泡排序的轮数。一轮是指一次完整冒泡过程。
然后,输入一组不超过10个的整数,用冒泡排序法从大到小的排序,根据m输出第m轮冒泡后的中间结果。
我们需要定义一个函数,作用是对传入的整型数组a进行冒泡排序,其中n表示数组a中需要排序的元素个数,m表示排序的轮数。
public static void sort(int a[], int n, int m) {
for (int i = 0; i < m; i++) {
for (int j = 0; j < n - 1 - i; j++) {
if (a[j] < a[j + 1]) {
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
具体解释如下:
- 外层循环控制冒泡排序的轮数,共进行m轮排序。
- 内层循环在每一轮中遍历未排序部分的相邻元素,比较它们的大小。
- 如果前一个元素a[j]比后一个元素a[j+1]小,则交换它们的位置,确保较大的元素向数组末尾移动。
- 每一轮内层循环结束时,最大的元素将被交换到正确的位置上。
- 最终完成m轮排序后,数组a中的元素将按照从大到小的顺序排列。
整体代码如下
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
int m = sc.nextInt();
int[] a = new int[n];
for (int i = 0; i < n; i++) {
a[i] = sc.nextInt();
}
sort(a, n, m);
for (int num : a) {
System.out.print(num + " ");
}
}
public static void sort(int a[], int n, int m) {
for (int i = 0; i < m; i++) {
for (int j = 0; j < n - 1 - i; j++) {
if (a[j] < a[j + 1]) {
int temp = a[j];
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
}
}
冒泡排序算法的基本思想是通过相邻元素之间的比较和交换,将最大的元素逐步交换到数组的末尾。在每一轮冒泡过程中,都会将当前未排序部分的最大元素移动到合适的位置。