publicclass BubbleSort { publicstaticvoid main(String[] args) { int[] arr={6,3,8,2,9,1}; System.out.println("排序前数组为:"); for(int num:arr){ System.out.print(num+""); } for(int i=0;i<arr.length-1;i++){ for(int j=0;j<arr.length-1-i;j++){ if(arr[j]>arr[j+1]){ int temp=arr[j]; arr[j]=arr[j+1];arr[j+1]=temp; } } } System.out.println(); System.out.println("排序后的数组为:"); for(int num:arr){ System.out.print(num+""); } } }找出代码存在的问题
时间: 2023-05-18 12:04:16 浏览: 92
代码存在两个问题:
1. 在第一个for循环中,打印数组元素时,缺少空格,应该改为System.out.print(num + " ");
2. 在两个for循环中,循环条件中的i和j没有自增,应该改为i++和j++。
相关问题
public class BubbleSort { public static void bubbleSort(int[] arr) { int n = arr.length; for (int i = 0; i < n-1; i++) { for (int j = 0; j < n-i-1; j++) { if (arr[j] > arr[j+1]) { // swap arr[j+1] and arr[j] int temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } } public static void main(String[] args) { int[] arr = {64, 34, 25, 12, 22, 11, 90}; bubbleSort(arr); System.out.println("Sorted array:"); for (int i = 0; i < arr.length; i++) { System.out.print(arr[i] + " "); } }}优化
冒泡排序的时间复杂度为 O(n^2),如果数据量较大,排序的时间会很慢。下面介绍两种优化方法:
1. 如果在一次外循环中,没有发生任何交换,则说明数组已经有序,可以提前结束排序。
2. 在内循环中,记录最后一次交换的位置,该位置后面的元素已经有序,下一次内循环只需要遍历到这个位置即可。
优化后的代码如下:
```
public static void bubbleSort(int[] arr) {
int n = arr.length;
for (int i = 0; i < n - 1; i++) {
boolean flag = true; // 标记是否发生交换
int lastIndex = n - 1; // 记录最后一次交换的位置
for (int j = 0; j < lastIndex; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
flag = false;
lastIndex = j; // 更新最后一次交换的位置
}
}
if (flag) { // 如果没有发生交换,说明已经有序,提前结束排序
break;
}
}
}
```
public class java { public interface MyInterface { //定义了一个接口 MyInterface void bubbleSort(); //包含一个抽象方法 hello() } public static class Main implements MyInterface { public static void main(String[] args) { Main obj = new Main(); obj.bubbleSort(); //Main 类中实现了该接口 } public void bubbleSort() { //重写了 hello() 方法 int[] arr = { 5, 2, 8, 3, 1, 6 }; int n = arr.length; int temp = 0; for (int i = 0; i < n; i++) { for (int j = 1; j < (n - i); j++) { if (arr[j - 1] > arr[j]) { // 交换元素位置 temp = arr[j - 1]; arr[j - 1] = arr[j]; arr[j] = temp; } } } // 输出排序后的数组 for (int i = 0; i < n; i++) { System.out.print(arr[i] + " "); } } } }
这段代码中定义了一个接口MyInterface,其中包含一个抽象方法bubbleSort()。同时,代码中还定义了一个实现了该接口的Main类,并且重写了bubbleSort()方法。在Main类的main方法中,创建了Main类的对象并调用了实现的bubbleSort()方法,进行了一个冒泡排序,并输出排序后的数组。
阅读全文