我是一名新手程序员,目前正在休息,所以我只是想在我再次上学之前提高自己的技能。我编写了一些代码,这些代码将创建一个包含100个元素的数组,并使用0到250之间的随机数填充所有100个索引。
我已编写代码来使用气泡排序算法和选择排序算法对此数组进行排序(我计划执行所有已知的数组排序算法并比较执行时间。)我注意到我的选择排序运行时间比泡泡排序。
运行示例:冒泡排序时间:7.45 ms ------选择排序时间:0.15 ms
所以我的问题是......我搞砸了什么或这些结果是否正常?
这是我的代码:
import java.util.*;
public class Bubble {
private static int[] myArray;
private static int[] myBubbleArray;
private static int[] mySelectionArray;
public static void main(String args[]){
createList();
fillArray();
print("Original Array: ", myArray);
long selectionStartTime = System.nanoTime();
selectionSortArray(mySelectionArray);
double selectionElapsedTime = (System.nanoTime() - selectionStartTime) / 1000000.0;
print("Selection Sorted Array: ", mySelectionArray);
System.out.printf("Total execution time for selection sort is %.2f ms\n", selectionElapsedTime);
long bubbleStartTime = System.nanoTime();
bubbleSortArray(myBubbleArray);
double bubbleElapsedTime = (System.nanoTime() - bubbleStartTime) / 1000000.0;
print("Bubble Sorted Array: ", myBubbleArray);
System.out.printf("Total execution time for bubble sort is %.2f ms\n", bubbleElapsedTime);
}
private static int[] selectionSortArray(int[] array) {
int first;
int temp;
for(int i=array.length -1; i > 0; i--){
first = 0;
for(int j = 1; j <= i; j++){
if(array[j] > array[first]) first = j;
}
temp = array[first];
array[first] = array[i];
array[i] = temp;
}
return mySelectionArray;
}
private static int[] bubbleSortArray(int[] array) {
boolean swapped = true;
int temp;
while(swapped){
swapped = false;
for(int i = 0; i < array.length-1; i ++){
for(int j = 1; j < array.length - i; j++){
if(array[i] > array[i+1]){
temp = array[i];
array[i] = array[i+1];
array[i+1] = temp;
swapped = true;
}
}
}
}
return myBubbleArray;
}
public static int[] createList(){
myArray = new int[100];
return myArray;
}
public static void print(String n, int[] array){
System.out.print(n);
for(int i = 0; i < array.length; i ++){
System.out.print(array[i]+ " ");
}
System.out.println();
}
public static void fillArray(){
for(int i = 0; i < myArray.length-1; i ++){
Random rand = new Random();
myArray[i] = rand.nextInt(250);
}
myBubbleArray = Arrays.copyOf(myArray, myArray.length);
mySelectionArray = Arrays.copyOf(myArray, myArray.length);
}
}
答案 0 :(得分:2)
要获得深入的答案,go here。总结具体来说,冒泡排序平均每个条目需要n / 4个交换(每个条目从其初始位置逐个元素移动到最终位置,每个交换包含两个条目),而选择排序只需要1(一旦找到最小值/最大值,它就会被交换一次到数组的末尾。
就比较次数而言,冒泡排序需要k×n个比较,其中k是条目初始位置与其最终位置之间的最大距离,对于均匀分布的初始值,通常大于n / 2。但是,选择排序总是需要(n-1)×(n-2)/ 2次比较。