【问题标题】:the sorting goes wrong when sorting the descending numbers stored in an array and there is minor error in bubble sort对存储在数组中的降序数字进行排序时排序出错并且冒泡排序存在小错误
【发布时间】:2019-12-20 01:39:16
【问题描述】:

问题: 1. 对最差情况进行排序,在所有排序方法中只显示一半的结果。

目标: 1. 使用冒泡排序、插入排序和选择排序对最佳情况、平均情况和最差情况进行排序。

尝试过的修复: 1. 改变数组的值。 2.检查排序本身。 3. 使大小写值表明它是正确的。

导入 java.util.Arrays;

公共类随机{

public static void main(String[] args) {
    int[] bestCase = ascRan();
    int[] average = ran();
    int[] worstCase = desRan();

    System.out.println("Best Case: \t\t"    + Arrays.toString(bestCase));
    System.out.println("Average: \t\t"      + Arrays.toString(average));
    System.out.println("Worst Case: \t"     + Arrays.toString(worstCase));

    System.out.println("\nCurrent Time(ms): " + System.currentTimeMillis());
    System.out.println("Current Time(ns): " + System.nanoTime());
    System.out.println();

    //Best Cases
    System.out.println("Bubble (Best Case)");
    int[]bSortBest = bubbleSort(bestCase);
    print(bSortBest);
    System.out.println("Insert (Best Case)");
    int[]iSortBest = insertionSort(bestCase);
    print(iSortBest);
    System.out.println("Select (Best Case)");
    int[]sSortBest = selectionSort(bestCase);
    print(sSortBest);

    //Average
    System.out.println("Bubble (Average)");
    int[]bSortAverage = bubbleSort(average);
    print(bSortAverage);
    System.out.println("Insert (Average)");
    int[]iSortAverage = insertionSort(average);
    print(iSortAverage);
    System.out.println("Select (Average)");
    int[]sSortAverage = selectionSort(average);
    print(sSortAverage);

    //Worst Cases
    System.out.println("Bubble (Worst Case)");
    int[]bSortWorst = bubbleSort(worstCase);
    print(bSortWorst);
    System.out.println("Insert (Worst Case)");
    int[]iSortWorst = insertionSort(worstCase);
    print(iSortWorst);
    System.out.println("Select (Worst Case)");
    int[]sSortWorst = selectionSort(worstCase);
    print(sSortWorst);
}

//Random 0-99
public static int[] ran() {
    int[] a = new int[101];
    for (int i = 0; i <= a.length -1; i++) {
        a[i] = (int) (Math.random() * 100);
    }
    return a;
}

//0-99
public static int[] ascRan() {
    int[] b = new int[100];
    int min;
    int max = 99;

    for(min = 0; min <= max; min++){
        b[min] = min;
    }
    return b;
}

//99-0
public static int[] desRan() {
    int[] c = new int[100];
    int min;
    int max = 99;

    for(min = 0; min <= max; min++){
        c[min] = max;
        max--;
    }
    return c;
}

public static int[]bubbleSort(int[] arr){
    int temp;
    for(int i = 0; i < arr.length; i++) {
        for (int j = 0; j < arr.length - 1 - i; j++) {
            if (arr[j] > (arr[j + 1])) {
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
    return arr;
}

public static int[]insertionSort(int[] arr){
    for (int i = 1; i < arr.length; i++){
        int key = arr[i];
        int j= i-1;
        while (j >= 0 && arr[j] > key){
            arr[j+1] = arr[j];
            j--;
        }
        arr[j+1]= key;
    }
    return arr;
}

public static int[]selectionSort(int[] arr) {
    for(int i = 0; i < arr.length-1; i++) {
        int minimum = i;
        for(int j = i + 1; j < arr.length; j++) {
            if (arr[j] < arr[minimum]) {
                minimum = j;
            }
            int temp = arr[minimum];
            arr[minimum] = arr[i];
            arr[i] = temp;
        }
    }
    return arr;
}

public static void print(int arr[]) {
    int n = arr.length;
    for(int i = 0; i < n; i++) {
        System.out.print(arr[i] + " ");
    }
    System.out.println("\nCurrent Time(ms): " + System.currentTimeMillis());
    System.out.println("Current Time(ns): " + System.nanoTime());
    System.out.println();
}

}

  1. 冒泡排序的平均情况 0 1 1 2 2 4 5 5 6 7 8 10 14 15 16 18 21 21 22 22 23 27 28 30 31 33 34 35 36 36 37 40 40 41 42 42 44 45 46 46 47 49 55 57 57 558 60,6076 77 77 74 78 79 79 80 80 99 99 99 99 99 99 99 99 97 当前时间(毫秒):1565701640559 当前时间(ns):91934126771600

  2. 冒泡排序的最坏情况 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50 51 52 57 54 55 56 57 57 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 97 98 99 0 当前时间(毫秒):1565701640580 当前时间(ns):91934147301100

  3. 插入排序的最坏情况 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50个 当前时间(毫秒):1565701640587 当前时间(ns):91934154307600

  4. 选择排序的最坏情况 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 50个 当前时间(毫秒):1565701640589 当前时间(ns):91934156292200

1 在排序结束时具有无效值 2,3,4 不显示数字 1-49

【问题讨论】:

  • 冒泡排序:for(int j = 1; j &lt; (arr.length - 1);j++){ 为什么是-1
  • 修复了冒泡排序...将更新问题
  • 感谢您的帮助...因此创建了我自己的版本
  • 最坏的情况......我仍然知道我的问题到底是什么。

标签: arrays sorting bubble-sort insertion-sort selection-sort


【解决方案1】:

包edu.slu.prog1;

导入 java.util.Arrays;

公共类随机{

public static void main(String[] args) {
    int[] bestCase = ascRan();
    int[] average = ran();
    int[] worstCase = desRan();

    System.out.println("Best Case: \t\t"    + Arrays.toString(bestCase));
    System.out.println("Average: \t\t"      + Arrays.toString(average));
    System.out.println("Worst Case: \t"     + Arrays.toString(worstCase));

    System.out.println("\nCurrent Time(ms): " + System.currentTimeMillis());
    System.out.println("Current Time(ns): " + System.nanoTime());
    System.out.println();

    //Best Cases
    System.out.println("Bubble (Best Case)");
    int[]bSortBest = bubbleSort(bestCase);
    print(bSortBest);
    System.out.println("Insert (Best Case)");
    int[]iSortBest = insertionSort(bestCase);
    print(iSortBest);
    System.out.println("Select (Best Case)");
    int[]sSortBest = selectionSort(bestCase);
    print(sSortBest);

    //Average
    System.out.println("Bubble (Average)");
    int[]bSortAverage = bubbleSort(average);
    print(bSortAverage);
    System.out.println("Insert (Average)");
    int[]iSortAverage = insertionSort(average);
    print(iSortAverage);
    System.out.println("Select (Average)");
    int[]sSortAverage = selectionSort(average);
    print(sSortAverage);

    //Worst Cases
    System.out.println("Bubble (Worst Case)");
    int[]bSortWorst = bubbleSort(worstCase);
    print(bSortWorst);
    System.out.println("Insert (Worst Case)");
    int[]iSortWorst = insertionSort(worstCase);
    print(iSortWorst);
    System.out.println("Select (Worst Case)");
    int[]sSortWorst = selectionSort(worstCase);
    print(sSortWorst);
}

//Random 0-99
public static int[] ran() {
    int[] a = new int[100];
    for (int i = 0; i <= a.length -1; i++) {
        a[i] = (int) (Math.random() * 100);
    }
    return a;
}

//0-99
public static int[] ascRan() {
    int[] b = new int[100];
    int min;
    int max = 99;

    for(min = 0; min <= max; min++){
        b[min] = min;
    }
    return b;
}

//99-0
public static int[] desRan() {
    int[] c = new int[100];
    int min;
    int max = 99;
    int des = max;

    for(min = 0; min <= max; min++){
        c[min] = des;
        des--;
    }
    return c;
}

public static int[]bubbleSort(int[] arr){
    int temp;
    for(int i = 0; i < arr.length; i++) {
        for (int j = 0; j < arr.length - 1 - i; j++) {
            if (arr[j] > (arr[j + 1])) {
                temp = arr[j];
                arr[j] = arr[j + 1];
                arr[j + 1] = temp;
            }
        }
    }
    return arr;
}

public static int[]insertionSort(int[] arr){
    for (int i = 1; i < arr.length; i++){
        int key = arr[i];
        int j= i-1;
        while (j >= 0 && arr[j] > key){
            arr[j+1] = arr[j];
            j--;
        }
        arr[j+1]= key;
    }
    return arr;
}

public static int[]selectionSort(int[] arr) {
    for(int i = 0; i < arr.length-1; i++) {
        int minimum = i;
        for(int j = i + 1; j < arr.length; j++) {
            if (arr[j] < arr[minimum]) {
                minimum = j;
            }
            int temp = arr[minimum];
            arr[minimum] = arr[i];
            arr[i] = temp;
        }
    }
    return arr;
}

public static void print(int arr[]) {
    for (int i = 0, arrLength = arr.length; i < arrLength; i++) {
        int anArr = arr[i];
        System.out.print(anArr + " ");
    }
    System.out.println("\nCurrent Time(ms): " + System.currentTimeMillis());
    System.out.println("Current Time(ns): " + System.nanoTime());
    System.out.println();
}

}

【讨论】:

  • 数组中的降序有故障区域所以我修复了它
猜你喜欢
  • 2019-01-01
  • 2016-02-10
  • 1970-01-01
  • 2012-01-17
  • 2020-05-17
  • 2021-04-26
  • 1970-01-01
  • 2018-09-22
相关资源
最近更新 更多