私はこのプロジェクトに、異なる配列の実行時間を見つける必要があるところに割り当てられています。私の配列は、選択配列からバブル、バブルから挿入、およびマージに移動する部分を除いて、完全に正常に機能しています。問題は、1から1000の間の乱数が選択ソートに渡され、ソートされた配列がソートメソッドの残りの部分に渡されるときです。私はもう一度私のコードを通過しようとしたが、私は問題が何かを見つけることができません。私は配列や何かを設定するはずですか?すべてのヘルプは 並べ替え方法に配列を渡して実行時間を調べる
package sorting;
import java.util.Arrays;
import java.util.Random;
import java.lang.Math;
import java.io.*;
import java.util.*;
public class sorting {
public static void main(String[] args) {
double[] arr1 = getArray(10000);
double[] arr2 = getArray(20000);
double[] arr3 = getArray(40000);
double[] arr4 = getArray(80000);
System.out.println("Problem 1: Selection sort, Bubble sort, Insertion sort, and Merge sort with thier execution time");
System.out.println("");
System.out.printf("%12s%15s%15s%17s%13s\n", "Number of Elements |", "Selection Sort", "Bubble Sort", "Insertion Sort", "Merge Sort");
System.out.println("--------------------------------------------------------------------------------");
long b = System.currentTimeMillis();
long startTime = System.currentTimeMillis();
selectionSort(arr1);
long endTime = System.currentTimeMillis();
long executionTime = endTime - startTime;
System.out.printf("%11s", arr1.length);
System.out.printf("%18s%2s", executionTime, " ms");
startTime = System.currentTimeMillis();
bubbleSort(arr1);
endTime = System.currentTimeMillis();
executionTime = endTime - startTime;
System.out.printf("%12s%2s", executionTime, " ms");
startTime = System.currentTimeMillis();
insertionSort(arr1);
endTime = System.currentTimeMillis();
executionTime = endTime - startTime;
System.out.printf("%12s%2s", executionTime, " ms");
startTime = System.currentTimeMillis();
(new MergeSort()).mergeSort(arr1);
endTime = System.currentTimeMillis();
executionTime = endTime - startTime;
System.out.printf("%12s%2s\n", executionTime, " ms");
System.out.printf("%11s", arr2.length);
startTime = System.currentTimeMillis();
selectionSort(arr2);
endTime = System.currentTimeMillis();
executionTime = endTime - startTime;
System.out.printf("%18s%2s", executionTime, " ms");
startTime = System.currentTimeMillis();
bubbleSort(arr2);
endTime = System.currentTimeMillis();
executionTime = endTime - startTime;
System.out.printf("%12s%2s", executionTime, " ms");
startTime = System.currentTimeMillis();
insertionSort(arr2);
endTime = System.currentTimeMillis();
executionTime = endTime - startTime;
System.out.printf("%12s%2s", executionTime, " ms");
startTime = System.currentTimeMillis();
(new MergeSort()).mergeSort(arr2);
endTime = System.currentTimeMillis();
executionTime = endTime - startTime;
System.out.printf("%12s%2s\n", executionTime, " ms");
System.out.printf("%11s", arr3.length);
startTime = System.currentTimeMillis();
bubbleSort(arr3);
endTime = System.currentTimeMillis();
executionTime = endTime - startTime;
System.out.printf("%18s%2s", executionTime, " ms");
startTime = System.currentTimeMillis();
bubbleSort(arr3);
endTime = System.currentTimeMillis();
executionTime = endTime - startTime;
System.out.printf("%12s%2s", executionTime, " ms");
startTime = System.currentTimeMillis();
insertionSort(arr3);
endTime = System.currentTimeMillis();
executionTime = endTime - startTime;
System.out.printf("%12s%2s", executionTime, " ms");
startTime = System.currentTimeMillis();
(new MergeSort()).mergeSort(arr3);
endTime = System.currentTimeMillis();
executionTime = endTime - startTime;
System.out.printf("%12s%2s\n", executionTime, " ms");
System.out.printf("%11s", arr4.length);
startTime = System.currentTimeMillis();
bubbleSort(arr4);
endTime = System.currentTimeMillis();
executionTime = endTime - startTime;
System.out.printf("%18s%2s", executionTime, " ms");
startTime = System.currentTimeMillis();
bubbleSort(arr4);
endTime = System.currentTimeMillis();
executionTime = endTime - startTime;
System.out.printf("%12s%2s", executionTime, " ms");
startTime = System.currentTimeMillis();
insertionSort(arr4);
endTime = System.currentTimeMillis();
executionTime = endTime - startTime;
System.out.printf("%12s%2s", executionTime, " ms");
startTime = System.currentTimeMillis();
(new MergeSort()).mergeSort(arr4);
endTime = System.currentTimeMillis();
executionTime = endTime - startTime;
System.out.printf("%12s%2s\n", executionTime, " ms");
}
public static double[] getArray(int n){
double[] arr = new double[n];
for(int i=0; i<n; i++){
arr[i] = ((double)(Math.random()*1000));
}
return arr;
}
public static void selectionSort(double[] arr) {
for (int i = 0; i < arr.length - 1; i++) {
double min = arr[i];
int currentMin = i;
for (int j = i + 1; j < arr.length; j++) {
if (min > arr[j]) {
min = arr[j];
currentMin = j;
}
}
if (currentMin != i) {
arr[currentMin] = arr[i];
arr[i] = min;
}
}
}
public static double[] insertionSort(double[] arr) {
double temp;
for (int i = 1; i < arr.length; i++) {
for (int j = i; j > 0; j--) {
if (arr[j] < arr[j - 1]) {
temp = arr[j];
arr[j] = arr[j - 1];
arr[j - 1] = temp;
}
}
}
return arr;
}
public static double[] bubbleSort(double[] arr) {
double temp;
for (int i = 0; i < arr.length; i++) {
// bubble up
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 class MergeSort {
private double[] array;
private double[] temp;
private int length;
public double[] mergeSort(double[] arr) {
this.array = arr;
this.length = arr.length;
this.temp = new double[length];
merge1(0, length - 1);
return arr;
}
private void merge1(int left, double right) {
if (left < right) {
double middle = left + (right - left)/2;
merge1(left, middle);
merge1((int) (middle + 1), right);
merge2(left, middle, right);
}
}
private void merge2(int left, double middle, double right) {
for (int i = left; i <= right; i++) {
temp[i] = array[i];
}
int i = left;
int j = (int) (middle + 1);
int k = left;
while (i <= middle && j <= right) {
if (temp[i] <= temp[j]) {
array[k] = temp[i];
i++;
} else {
array[k] = temp[j];
j++;
}
k++;
}
while (i <= middle) {
array[k] = temp[i];
k++;
i++;
}
}
}
}
この
を高く評価しているは私が 問題1のような出力を得ているものです:選択ソート、バブルソート、挿入ソート、およびthier実行時間とソートマージ
Number of Elements | Selection Sort Bubble Sort Insertion Sort Merge
Sort
----------------------------------------------------------------------------
10000 85 ms 31 ms 31 ms 16 ms
20000 385 ms 100 ms 123 ms 10 ms
40000 3085 ms 401 ms 347 ms 8 ms
80000 13231 ms 1972 ms 1484 ms 35 ms
は、選択ソートの後に他の人が得ることの問題です処理するソートされた配列? – nullpointer
あなたの出力は、さまざまなソート方法の複雑さに基づいて妥当に見えます。ここでデバッガを使って問題が発生している行を見つけようとしましたか?ほとんどのSOユーザーは、IDEでテストするのではなく、貼り付けたコード全体を読む時間がありません。 –
はい。彼らは別のソート方法に移動するたびに新しい配列を受け取ることになっています –