1 package com.vens.designer; 2 3 import java.util.ArrayList; 4 import java.util.Scanner; 5 6 7 public class Algorithm { 8 private Integer number; //排序个数 9 private Integer[] list; //数组 10 private Integer key; //key值 11 private Integer chooice; 12 private ArrayList<Integer> array=new ArrayList<Integer>(); 13 Scanner scanner=new Scanner(System.in); 14 15 /** 16 * 信息界面模块 17 */ 18 public void infomation() { 19 System.out.println("*=======================*"); 20 System.out.println("* 选择相应的算法 *"); 21 System.out.println("* 1.插入排序 *"); 22 System.out.println("* 2.合并排序 *"); 23 System.out.println("*=======================*"); 24 System.out.println("请选择相应的功能:"); 25 chooice=scanner.nextInt(); 26 if (1==chooice) { 27 inputFunction(); 28 insertSort(); 29 outputFunction(); 30 }else if (2==chooice) { 31 inputForList(); 32 Merge(array, 0, number-1); 33 outputForList(); 34 }else { 35 infomation(); 36 } 37 } 38 39 /** 40 * 输入提示模块 41 */ 42 public void inputFunction() { 43 System.out.println("请输入排序总量:"); 44 number=scanner.nextInt(); 45 list=new Integer[number]; 46 System.out.println("请输入排序队列:"); 47 for (int i = 0; i < number; i++) { 48 list[i]=scanner.nextInt(); 49 } 50 System.out.println("排序前队列:"); 51 for (int j = 0; j < number; j++) { 52 System.out.print(list[j]); 53 } 54 System.out.println("\n"); 55 } 56 57 /** 58 * 为ArrayList准备的插入模块 59 */ 60 public void inputForList() { 61 System.out.println("请输入排序总量:"); 62 number=scanner.nextInt(); 63 list=new Integer[number]; 64 System.out.println("请输入排序队列:"); 65 for (int i = 0; i < number; i++) { 66 array.add(i,scanner.nextInt()); 67 } 68 System.out.println("排序前队列:"); 69 for (int j = 0; j < number; j++) { 70 System.out.print(array.get(j)); 71 } 72 System.out.println("\n"); 73 } 74 75 /** 76 * 结果界面模块 77 */ 78 public void outputFunction() { 79 System.out.println("排序后队列:"); 80 for (int j = 0; j < number; j++) { 81 System.out.print(list[j]); 82 } 83 System.out.println("\n"); 84 } 85 86 /** 87 * 结果界面模块ArrayList 88 */ 89 public void outputForList() { 90 System.out.println("排序后队列:"); 91 for (int j = 0; j < number; j++) { 92 System.out.print(array.get(j)); 93 } 94 System.out.println("\n"); 95 } 96 97 98 /** 99 * 插入排序模块 100 */ 101 public void insertSort(){ 102 for (int i = 1; i < number; i++) { 103 key=list[i]; //将新加入的值赋值给key 104 for (int j = i-1; j >= 0; j--) {//给新加入的值找位置 105 while (list[j]>key) {//如果key小于前一个值 106 list[j+1]=list[j];//将key之前的值赋值给key 107 list[j]=key; 108 } 109 } 110 } 111 } 112 113 /** 114 * 合并排序--拆分队列模块 115 * @param list 116 * @param first 117 * @param last 118 */ 119 public void Merge(ArrayList<Integer> list,Integer first,Integer last){ 120 if (last>first) { 121 Integer middle = (first+last)/2; 122 Merge(list, first, middle); 123 Merge(list, middle+1, last); 124 Merge(list, first, middle, last); 125 } 126 } 127 /** 128 * 合并排序-合并队列模块 129 * @param list 130 * @param first 131 * @param middle 132 * @param last 133 */ 134 public void Merge(ArrayList<Integer> list,Integer first,Integer middle,Integer last) { 135 Integer n1=middle-first+1; 136 Integer n2=last-middle; 137 Integer x=0,y=0; 138 139 ArrayList<Integer> leftList=new ArrayList<Integer>(); 140 ArrayList<Integer> rightList=new ArrayList<Integer>(); 141 142 143 for (int i = 0; i < n1; i++) { 144 leftList.add(i,list.get(first+i)); 145 } 146 leftList.add(n1,100); //哨兵 147 for (int j = 0; j < n2; j++) { 148 rightList.add(j,list.get(middle+j+1)); 149 } 150 rightList.add(n2, 100); //哨兵 151 152 for (int i = first; i <= last; i++) { 153 if (leftList.get(x)<=rightList.get(y)) { 154 list.set(i, leftList.get(x)); 155 x++; 156 }else { 157 list.set(i, rightList.get(y)); 158 y++; 159 160 } 161 } 162 163 164 } 165 166 167 public static void main(String[] args) { 168 Algorithm algorithm = new Algorithm(); 169 algorithm.infomation(); 170 171 } 172 }
转载于:https://www.cnblogs.com/DIGUO_F/archive/2012/07/07/2580620.html