java sort 效率_java的同样排序函数的执行效率

该博客展示了如何使用Java实现不同的排序算法,包括选择排序、冒泡排序和快速排序。通过用户输入数组长度和选择排序算法,程序会运行并输出所选排序算法的执行时间和是否成功排序的结果。实验结果显示,快速排序的效率显著高于其他两种算法。
摘要由CSDN通过智能技术生成

package com.liuxt.sort;

import java.io.BufferedReader;

import java.io.InputStreamReader;

public class SortMain {

public static void main(String[] args) throws Exception {

SortUtil sortUtil=new SortUtil();

while(true)

{

System.out.print("please input the length of the Array:");

BufferedReader br=new BufferedReader(new InputStreamReader(System.in));

String arrayLength=br.readLine();

int dataLength=Integer.parseInt(arrayLength);

sortUtil.dataLength=dataLength;

int[] a=sortUtil.randomArray();

System.out.print("please select an sort algorithm:1 select 2 bubble 3 quick,0 quit:");

String sortSelect=br.readLine();

int algorithm=Integer.parseInt(sortSelect);

sortUtil.sortData(algorithm,a);

if (algorithm==0){

System.exit(0);

}

}

}

}

package com.liuxt.sort;

import java.util.Calendar;

import java.util.Random;

import com.liuxt.sort.impl.Bubble;

import com.liuxt.sort.impl.QuickSort;

import com.liuxt.sort.impl.Select;

public class SortUtil {

public  final int SelectSort=1;

public  final int BubbleSort=2;

public  final int QuickSort=3;

public  final int XierSort=4;

public  int dataLength=0;

int maxElement = 100000;

//Calendar start_time=Calendar.getInstance();

Calendar start_time=null;

Calendar end_time=null;

public  int[] randomArray() {

int[] a = new int[dataLength];

Random random = new Random();

for (int i = 0; i < dataLength; i++) {

a[i] = random.nextInt(maxElement);

}

return a;

}

private boolean testSort(int[] a){

for(int i=0;i

if (a[i]>a[i+1]) return false;

}

return true;

}

public void sortData(int algorithm,int[] a){

if (algorithm==SelectSort){

DataSort dataSort = new Select();

start_time=Calendar.getInstance();

dataSort.sortData(a);

end_time=Calendar.getInstance();

long duration=end_time.getTimeInMillis()-start_time.getTimeInMillis();

System.out.println("duration time:"+(duration));

System.out.println("elapse time:"+(duration/1000.0)+"s");

System.out.println("test result:==="+testSort(a));

}

if (algorithm==BubbleSort){

DataSort dataSort = new Bubble();

start_time=Calendar.getInstance();

dataSort.sortData(a);

end_time=Calendar.getInstance();

long duration=end_time.getTimeInMillis()-start_time.getTimeInMillis();

System.out.println("elapse time:"+(duration/1000.0)+"s");

System.out.println("test result:==="+testSort(a));

}

if (algorithm==QuickSort){

DataSort dataSort = new QuickSort();

start_time=Calendar.getInstance();

dataSort.sortData(a);

end_time=Calendar.getInstance();

long duration=end_time.getTimeInMillis()-start_time.getTimeInMillis();

System.out.println("elapse time:"+(duration/1000.0)+"s");

System.out.println("test result:==="+testSort(a));

}

}

}

package com.liuxt.sort.impl;

import com.liuxt.sort.DataSort;

public class Bubble implements DataSort {

public void sortData(int[] data) {

int i = 0, j = 0, temp = 0;

boolean exchange;

for (i = 0; i < data.length; i++) // 设定执行的次数

{

exchange = false;// 每趟排序前设定 交换标志

for (j = 0; j < data.length - i - 1; j++) {

if (data[j] > data[j + 1]) {

// 将j和j+1互换

temp = data[j];

data[j] = data[j + 1];

data[j + 1] = temp;

exchange = true;

}

}

if (!exchange) // 本趟排序未发生交换,提前终止算法

return;

} // end for i

}

}

package com.liuxt.sort.impl;

import com.liuxt.sort.DataSort;

public class Select implements DataSort {

public void sortData(int[] data) {

int i, j, temp, min;

int n = data.length;

for (i = 0; i < n - 1; i++) {

min = i;

for (j = i + 1; j < n; j++) {

if (data[j] < data[min]) {

min = j;

// temp=data[i];data[i]=data[j];data[j]=temp;

}

}

temp = data[i];

data[i] = data[min];

data[min] = temp;

}

}

}

package com.liuxt.sort.impl;

import com.liuxt.sort.DataSort;

public class QuickSort implements DataSort {

public void sortData(int[] data) {

try {

quickSort3(data, 0, data.length - 1);

} catch (Exception e) {

e.printStackTrace();

}

}

void quickSort3(int data[],int low,int high){

int i,j,privokey;

if (low

privokey=data[low];i=low;j=high;

while(i

while(i=privokey) j--;

if (i

while(i

if(i

}

data[i]=privokey;

quickSort3(data,low,i-1);

quickSort3(data,i+1,high);

}

}

}

run.bat

echo off

set java_home=C:\Program Files\Java\jdk1.5.0_14

set classpath="%java_home%/lib/dt.jar;%java_home%/lib/tool.jar;."

java -cp %classpath% com/liuxt/sort/SortMain

执行结果:

please input the length of the Array:50000

please select an sort algorithm:1 select 2 bubble 3 quick,0 quit:1

duration time:6984

elapse time:6.984s

test result:===true

please input the length of the Array:50000

please select an sort algorithm:1 select 2 bubble 3 quick,0 quit:2

elapse time:16.469s

test result:===true

please input the length of the Array:50000

please select an sort algorithm:1 select 2 bubble 3 quick,0 quit:3

elapse time:0.016s

test result:===true

分享到:

18e900b8666ce6f233d25ec02f95ee59.png

72dd548719f0ace4d5f9bca64e1d7715.png

2009-06-11 20:50

浏览 1013

论坛回复 / 浏览 (0 / 1722)

评论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值