使用冒泡排序和选择排序进行排序所需的时间

时间:2016-12-15 17:54:56

标签: java sorting

为什么我会选择相同的时间进行选择和冒泡排序。我所有的排序方法都正常工作,但我得到了确切的时间进行冒泡和选择排序..

import java.util.Scanner;
public class sorting{
    public static void selectionsort(double[] list, int a, int b, double temp, int length){
        double min;
        int index=0;
        /*for(int p=0;p<list.length;p++){
            System.out.println("input="+list[p]);
        }*/
        int n=0;
        int status=0;
        while(n<length){
            min=list[n];
            for(int j=n;j<(length-1);j++){
                if(list[j+1]<min){
                    min=list[j+1];
                    index=(j+1);
                    status=1;
                }

            }
            if(min!=list[n]){
                temp=list[n];
                //System.out.println("Original val="+temp);
                //System.out.println("Before n="+n);
                list[n]=min;
                //System.out.println("After n="+n);
                //System.out.println("switch val="+list[n]);
                list[index]=temp;
                //System.out.println("new switch val at="+index);
                n++;
                //System.out.println("Updated");
                /*for(int k=0;k<list.length;k++){
                    System.out.println("Output="+list[k]);
                }*/
            }
            else 
                n++;
        }
        //System.out.println("Done selection:");
        /*for(int k=0;k<list.length;k++){
            System.out.println("Output="+list[k]);
        }*/
    }
    public static void bubblesort(double[] list, int a, int b, double temp, double length){
        /*for(int p=0;p<list.length;p++){
            System.out.println("inputb="+list[p]);
        }*/
        while(length>=0){
            for(int k=0;k<=(length-2);k++){
                if(list[k]>list[k+1]){
                    temp=list[k+1];
                    list[k+1]=list[k];
                    list[k]=temp;
                }
            }
            length--;
        }
        //System.out.println("Done bubble:");
        /*for(int k=0;k<list.length;k++){
            System.out.println("Outputb="+list[k]);
        }*/
    }
    public static void main(String[] args){
        Scanner in=new Scanner(System.in);
        System.out.println("Lower bound");
        int a=in.nextInt();
        System.out.println("High bound");
        int b=in.nextInt();
        System.out.println("how many elements?");
        int n=in.nextInt();
        double[] list=new double[n];
        double[] sel=new double[n];
        double[] bub=new double[n];
        for(int i=0;i<list.length;i++){//intializes the array 
            list[i]=((Math.random()*(b-a)))+a;
        }
        for(int h=0;h<sel.length;h++){//selection
            sel[h]=list[h];
        }
        for(int l=0;l<bub.length;l++){//bubble
            bub[l]=list[l];
        }
        double temp=0.0;
        int length=list.length;
        long startTime = System.nanoTime();
        selectionsort(sel,a,b,temp,length);
        long duration = System.nanoTime() - startTime;
        System.out.println("Time for selection="+(duration*1.0E-9));
        long startTime1 = System.nanoTime();
        bubblesort(bub,a,b,temp,length);
        long duration1 = System.nanoTime() - startTime1;
        System.out.println("Time for bubble="+(duration*1.0E-9));
    }
}

1 个答案:

答案 0 :(得分:3)

因为您要重复打印duration两次,所以在第二次打印中,您应该使用duration1

此外,正如鲍里斯在评论部分写道:那不是做基准测试的方式。更好地使用基准测试框架,该框架将负责预热JVM并多次运行两种方法以查找平均运行时间和等等。

相关问题