我的“插入演算法”實現

來源:互聯網
上載者:User

這是我的“插入演算法”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:58136  * 21:53:34 請輸入產生的資料量: 500000 請輸入產生的資料的最大值: 2000 哨兵插入法排序演算法的時間如下: 21:55:07137  * 21:57:12138  */

 

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.