Java数组排序(插入,选择,冒泡)+显示排序时间

来源:互联网 发布:伦拜亚斯对乔丹数据 编辑:程序博客网 时间:2024/06/05 04:28

可以指定用什么方法排序

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 升序数组 */@Overridepublic  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 升序数组 */@Overridepublic 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 升序数组 */@Overridepublic 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 ;}}