JAVA排序演算法實現代碼-希爾Shell排序

來源:互聯網
上載者:User
 
JAVA排序演算法實現代碼-希爾Shell排序
  1. /** 
  2.  * JAVA排序演算法實現代碼-希爾Shell排序。 
  3.  *  
  4.  * @author 老紫竹 JAVA世紀網(java2000.net) 
  5.  *  
  6.  */  
  7. public class Test {  
  8.   public static int[] a = { 10, 32, 1, 9, 5, 7, 12, 0, 4, 3 }; // 預設資料數組  
  9.   
  10.   public static void main(String args[]) {  
  11.     int i; // 迴圈計數變數  
  12.     int Index = a.length;// 資料索引變數  
  13.   
  14.     System.out.print("排序前: ");  
  15.     for (i = 0; i < Index - 1; i++)  
  16.       System.out.printf("%3s ", a[i]);  
  17.     System.out.println("");  
  18.   
  19.     ShellSort(Index - 1); // 選擇排序  
  20.     // 排序後結果  
  21.     System.out.print("排序後: ");  
  22.     for (i = 0; i < Index - 1; i++)  
  23.       System.out.printf("%3s ", a[i]);  
  24.     System.out.println("");  
  25.   }  
  26.   
  27.   public static void ShellSort(int Index) {  
  28.     int i, j, k; // 迴圈計數變數  
  29.     int Temp; // 暫存變數  
  30.     boolean Change; // 資料是否改變  
  31.     int DataLength; // 分割集合的間隔長度  
  32.     int Pointer; // 進行處理的位置  
  33.   
  34.     DataLength = (int) Index / 2; // 初始集合間隔長度  
  35.   
  36.     while (DataLength != 0) // 數列仍可進行分割  
  37.     {  
  38.       // 對各個集合進行處理  
  39.       for (j = DataLength; j < Index; j++) {  
  40.         Change = false;  
  41.         Temp = a[j]; // 暫存Data[j]的值,待交換值時用  
  42.         Pointer = j - DataLength; // 計算進行處理的位置  
  43.   
  44.         // 進行集合內數值的比較與交換值  
  45.         while (Temp < a[Pointer] && Pointer >= 0 && Pointer <= Index) {  
  46.           a[Pointer + DataLength] = a[Pointer];  
  47.           // 計算下一個欲進行處理的位置  
  48.           Pointer = Pointer - DataLength;  
  49.           Change = true;  
  50.           if (Pointer < 0 || Pointer > Index)  
  51.             break;  
  52.         }  
  53.         // 與最後的數值交換  
  54.         a[Pointer + DataLength] = Temp;  
  55.   
  56.         if (Change) {  
  57.           // 列印目前排序結果  
  58.           System.out.print("排序中: ");  
  59.           for (k = 0; k < Index; k++)  
  60.             System.out.printf("%3s ", a[k]);  
  61.           System.out.println("");  
  62.         }  
  63.       }  
  64.       DataLength = DataLength / 2; // 計算下次分割的間隔長度  
  65.     }  
  66.   }  
  67. }  
/** * JAVA排序演算法實現代碼-希爾Shell排序。 *  * @author 老紫竹 JAVA世紀網(java2000.net) *  */public class Test {  public static int[] a = { 10, 32, 1, 9, 5, 7, 12, 0, 4, 3 }; // 預設資料數組  public static void main(String args[]) {    int i; // 迴圈計數變數    int Index = a.length;// 資料索引變數    System.out.print("排序前: ");    for (i = 0; i < Index - 1; i++)      System.out.printf("%3s ", a[i]);    System.out.println("");    ShellSort(Index - 1); // 選擇排序    // 排序後結果    System.out.print("排序後: ");    for (i = 0; i < Index - 1; i++)      System.out.printf("%3s ", a[i]);    System.out.println("");  }  public static void ShellSort(int Index) {    int i, j, k; // 迴圈計數變數    int Temp; // 暫存變數    boolean Change; // 資料是否改變    int DataLength; // 分割集合的間隔長度    int Pointer; // 進行處理的位置    DataLength = (int) Index / 2; // 初始集合間隔長度    while (DataLength != 0) // 數列仍可進行分割    {      // 對各個集合進行處理      for (j = DataLength; j < Index; j++) {        Change = false;        Temp = a[j]; // 暫存Data[j]的值,待交換值時用        Pointer = j - DataLength; // 計算進行處理的位置        // 進行集合內數值的比較與交換值        while (Temp < a[Pointer] && Pointer >= 0 && Pointer <= Index) {          a[Pointer + DataLength] = a[Pointer];          // 計算下一個欲進行處理的位置          Pointer = Pointer - DataLength;          Change = true;          if (Pointer < 0 || Pointer > Index)            break;        }        // 與最後的數值交換        a[Pointer + DataLength] = Temp;        if (Change) {          // 列印目前排序結果          System.out.print("排序中: ");          for (k = 0; k < Index; k++)            System.out.printf("%3s ", a[k]);          System.out.println("");        }      }      DataLength = DataLength / 2; // 計算下次分割的間隔長度    }  }}

運行結果

排序前: 10 32 1 9 5 7 12 0 4

排序中: 5 32 1 9 10 7 12 0 4

排序中: 5 7 1 9 10 32 12 0 4

排序中: 5 7 1 0 10 32 12 9 4

排序中: 4 7 1 0 5 32 12 9 10

排序中: 1 7 4 0 5 32 12 9 10

排序中: 1 0 4 7 5 32 12 9 10

排序中: 1 0 4 7 5 9 12 32 10

排序中: 1 0 4 7 5 9 10 32 12

排序中: 0 1 4 7 5 9 10 32 12

排序中: 0 1 4 5 7 9 10 32 12

排序中: 0 1 4 5 7 9 10 12 32

排序後: 0 1 4 5 7 9 10 12 32

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.