可以指定用什么方法排序
Args若有参数,则1表示使用插入排序,2表示使用冒泡排序,3表示使用选择排序
若不传入args参数,则默认使用三种排序
待排序数组通过运行中键盘输入
package no.four;
import java.util.Scanner;
public class Sort {
public static void main(String args[]) {
int sortType = 0;
if (args.length > 0) {
//System.out.println("輸入排序方式:\n1 插入排序\n2 冒泡排序\n3 選擇排序 ");
sortType = Integer.parseInt(args[0]);
}
SortBasic sort ;
switch (sortType) {
case 1:
sort = new InsertSort();
sort.run();
System.out.println("---------------------------");
break;
case 2:
sort = new MaoPaoSort();
sort.run();
System.out.println("---------------------------");
break;
case 3:
sort = new SelectSort();
sort.run();
System.out.println("---------------------------");
break;
default:
sort = new InsertSort();
sort.run();
sort = new MaoPaoSort();
sort.run();
sort = new SelectSort();
sort.run();
System.out.println("---------------------------");
break;
}
}
}
abstract class SortBasic
{
int ve[];
/**
* 输出int数组
*
*/
private void printArray() {
for (int i : ve) {
System.out.print(i + " ");
}
System.out.println();
}
/**
* 输入int数组
*
*/
private void putArray() {
int n;
Scanner sc = new Scanner(System.in);
System.out.print("Array size?");
n = sc.nextInt();
ve = new int[n];
for (int i = 0; i < n; i++) {
ve[i] = sc.nextInt();
}
return;
}
abstract void sort();
void run()
{
putArray();
printArray();
sort();
printArray();
}
}
class InsertSort extends SortBasic
{
/**
* 插入排序
*
* @param ve
* 待排序数组
* @return 升序数组
*/
@Override
public void sort() {
long old = System.nanoTime();
for (int i = 1; i < ve.length; i++) {
int key = ve[i];
int j;
for (j = i; j > 0; j--) {
if (key < ve[j - 1]) {
ve[j] = ve[j - 1];
} else {
break;
}
}
ve[j] = key;
}
System.out.println("插入排序耗费 " + (System.nanoTime() - old) + " 纳秒");
return ;
}
}
class MaoPaoSort extends SortBasic
{
/**
* 冒泡排序
*
* @param ve
* 待排序数组
* @return 升序数组
*/
@Override
public void sort() {
long old = System.nanoTime();
for (int i = 0; i < ve.length; i++) {
for (int j = i + 1; j < ve.length; j++) {
if (ve[i] > ve[j]) {
int temp = ve[i];
ve[i] = ve[j];
ve[j] = temp;
}
}
}
System.out.println("冒泡排序耗费 " + (System.nanoTime() - old) + " 纳秒");
return ;
}
}
class SelectSort extends SortBasic
{
/**
* 选择排序
*
* @param ve
* 待排序数组
* @return 升序数组
*/
@Override
public void sort() {
long old = System.nanoTime();
for (int i = 0; i < ve.length; i++) {
int lowerIndex = i;
for (int j = i + 1; j < ve.length; j++) {
if (ve[j] < ve[lowerIndex]) {
lowerIndex = j;
}
}
int temp = ve[i];
ve[i] = ve[lowerIndex];
ve[lowerIndex] = temp;
}
System.out.println("选择排序耗费 " + (System.nanoTime() - old) + " 纳秒");
return ;
}
}