zoukankan      html  css  js  c++  java
  • 我的“插入算法”实现

    这是我的“插入算法”Java实现!

    View Code
      1 /*
      2  * 目的:练习 "插入排序"算法
      3  * 功能:对一个随机生成的数组进行非降排序
      4  * 时间:2013.03.08
      5  * 作者:iGeneral
      6  */
      7 package part01.chapter02;
      8 
      9 import java.util.*;
     10 import java.text.SimpleDateFormat;
     11 
     12 public class _1exercise {
     13 
     14     public static void main(String[] args) {
     15         //instantiated CreateData class
     16         CreateData createData = new CreateData();
     17         ArrayList myArrayList = null;
     18         int[] myArray=null;
     19         SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
     20         // select sort method
     21         Scanner myScanner = new Scanner(System.in);
     22         System.out.println("输入'1'使用一般的实现方式\t输入'2'使用哨兵技术实现方式:");
     23         int temp = myScanner.nextInt();
     24         INSERTION_SORT insertionSort=new INSERTION_SORT();
     25         switch (temp) {
     26         case 1:
     27             //create data
     28             myArrayList=createData.creat();
     29             // get data array
     30             myArray = (int[]) myArrayList.get(0);
     31             // get system's current time
     32             System.out.println("一般插入法排序算法的时间如下:");
     33             // get system's current time again
     34             System.out.println(sdf.format(new Date()));
     35             myArray = insertionSort.insertionSort(myArray);
     36             System.out.println(sdf.format(new Date()));
     37             break;
     38         case 2:
     39             // myArray=(int[]) myArrayList.get(0);因为是地址传递,故这么做不能达到重新编排数据的效果
     40             //create data again
     41             myArrayList=createData.creat();
     42             System.out.println("哨兵插入法排序算法的时间如下:");
     43             System.out.println(sdf.format(new Date()));
     44             myArray = insertionSort.insertionSort_Guard(myArrayList);
     45             System.out.println(sdf.format(new Date()));
     46             break;
     47         default:
     48             System.out.println("error enter!");
     49             break;
     50         }
     51          System.out.println("排序后的数据如下:");
     52          for(int i=0;i<myArray.length;i++){
     53          System.out.print(myArray[i]+" ");
     54          }
     55          System.out.println();
     56          main(null);
     57     }
     58 
     59 }
     60 
     61 // Create Data
     62 class CreateData {
     63     // 产生数据:通过键盘输入来控制输入数据规模和最大值
     64     public ArrayList creat() {
     65         Random myRandom = new Random(1);//通过指定Random seed来产生数列相同的数据,以保证排序时间更好地对比
     66         Scanner scanner = new Scanner(System.in);
     67         System.out.println("请输入生成的数据量:");
     68         int[] myArray = new int[scanner.nextInt()];
     69         // System.out.println(myArray.length);
     70         // 定义哨兵(Sentinel Card)来获取Array中的最小数据和其下标
     71         System.out.println("请输入生成的数据的最大值:");
     72         int stnCd = scanner.nextInt();
     73         final int mixNum = stnCd;
     74         int stnCdSub = 0;
     75         // 对数组进行随机赋值
     76         for (int i = 0; i < myArray.length; i++) {
     77             myArray[i] = myRandom.nextInt(mixNum);// mixNum必须是常量
     78             // 拿到数组中的最小值与其下标
     79             if (stnCd > myArray[i]) {
     80                 stnCd = myArray[i];
     81                 stnCdSub = i;
     82             }
     83         }
     84 
     85         // System.out.println("排序前的数据:");
     86         // for(int i=0;i<myArrayLength;i++){
     87         // System.out.print(myArray[i]+" ");
     88         // }
     89         // System.out.println();
     90         ArrayList returnArrayList = new ArrayList();
     91         returnArrayList.add(0, myArray);
     92         returnArrayList.add(1, stnCd);
     93         returnArrayList.add(2, stnCdSub);
     94         return returnArrayList;
     95     }
     96 }
     97 
     98 // Insertion sort
     99 class INSERTION_SORT {
    100     // 插入排序法对数据进行非降排序
    101     public int[] insertionSort(int[] myArray) {
    102         int key = 0;
    103         int j = 0;
    104         for (int i = 1; i < myArray.length; i++) {
    105             key = myArray[i];
    106             for (j = i - 1; j >= 0 && key < myArray[j]; j--) {
    107                 myArray[j + 1] = myArray[j];
    108             }
    109             myArray[j + 1] = key;
    110         }
    111         return myArray;
    112     }
    113 
    114     // 在“插入排序法”的基础上+“哨兵”
    115     public int[] insertionSort_Guard(ArrayList myArrayList) {
    116         int[] myArray = (int[]) myArrayList.get(0);
    117         int stnCd = (Integer) myArrayList.get(1);
    118         int stnCdSub = (Integer) myArrayList.get(2);
    119         // 最小值置最前
    120         myArray[stnCdSub] = myArray[0];
    121         myArray[0] = stnCd;
    122         // 进行排序
    123         int j = 0;
    124         for (int i = 2; i < myArray.length; i++) {
    125             stnCd = myArray[i];
    126             for (j = i - 1; myArray[j] > stnCd; j--) {
    127                 myArray[j + 1] = myArray[j];
    128             }
    129             myArray[j + 1] = stnCd;
    130         }
    131         return myArray;
    132     }
    133 }
    134 /*
    135  * `output: 请输入生成的数据量: 500000 请输入生成的数据的最大值: 2000 一般插入法排序算法的时间如下: 21:50:58
    136  * 21:53:34 请输入生成的数据量: 500000 请输入生成的数据的最大值: 2000 哨兵插入法排序算法的时间如下: 21:55:07
    137  * 21:57:12
    138  */
  • 相关阅读:
    性能测试二十四:环境部署之Redis多实例部署
    性能测试二十三:环境部署之Redis安装和配置
    性能测试二十二:环境部署之Nginx
    性能测试二十一:环境部署之mysql
    性能测试二十:环境部署之Tomcat多实例部署+日志监控
    性能测试十九:jmeter参数优化+排错
    Zookeeper学习
    Zookeeper学习
    Zookeeper学习
    Hadoop Balancer源码解读
  • 原文地址:https://www.cnblogs.com/igeneral/p/3046577.html
Copyright © 2011-2022 走看看