插入排序、合并排序的实现 insertSort and MergeSort

  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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值