Java常見排序演算法之Shell排序

來源:互聯網
上載者:User

標籤:

    在學習演算法的過程中,我們難免會接觸很多和排序相關的演算法。總而言之,對於任何編程人員來說,基本的排序演算法是必須要掌握的。

從今天開始,我們將要進行基本的排序演算法的講解。Are you ready?Let‘s go~~~

1、排序演算法的基本概念的講解

     時間複雜度:需要排序的的關鍵字的比較次數和相應的移動的次數。

     空間複雜度:分析需要多少輔助的記憶體。

     穩定性:如果記錄兩個關鍵字的A和B它們的值相等,經過排序後它們相對的位置沒有發生交換,那麼我們稱這個排序演算法是穩定的。

              否則我們稱這個排序演算法是不穩定的。

   

    排序演算法的常見分類:

    1、內部排序(最常見的一種排序方式,不需要藉助第三方輔助儲存工具)

    2、外部排序(需要藉助外部儲存來輔助完成相關的排序操作)

        如果參與排序的資料元素非常的多,資料量非常的大,電腦無法把整個排序過程放到記憶體中進行的話,

        我們必須藉助外部儲存空間如磁碟來完成,這種排序方式,我們稱之為外部排序。

        其中外部排序最常見的就是多路歸併排序,即將原始檔案分解成多個能夠一次性裝入記憶體的部分,分別把每一部分調入

        記憶體完成相應的排序,接下來在對多個有序的外部檔案進行多路歸併排序。

  

   對於我們絕大多數的程式員而言,我們經常遇到的為內部排序。接下來我們將要對常見的內部排序進行相應的講解。

    今天要講解的內部排序為:

   Shell排序

  1.Shell排序的基本概念的講解

  2.Shell排序的Java代碼實現

    

package com.yonyou.test;/** * 內部排序演算法之Shell排序 * 預設按照從小到大進行排序操作 * @author 小浩 * @建立日期 2015-3-27 */public class Test{public static void main(String[] args) {   //需要進行排序的數組int[] array=new int[]{8,3,2,1,7,4,6,5}; //輸出原數組的內容    printResult(array);//shell排序操作shellSort(array);//輸出排序後的相關結果printResult(array);}/** * shell排序演算法 * 增量h=(h*3)+1; 這個增量公式是由Knuth給出的 * 如果不是很瞭解的話請百度一下吧 * @param array */private static void shellSort(int[] array) {   //首先根據數組的長度確定增量的最大值   int h=1;   // 按h * 3 + 1得到增量序列的最大值   while(h <= array.length / 3){h = h * 3 + 1;}   //進行增量尋找和排序   while(h>0)   {      for(int i=h;i<array.length;i++)   {   for(int k=i;k<array.length;k+=h)   {   //判斷是否需要重新排序,如果小於k-h處的值,需要重新排序   if(array[k]<array[k-h])   {   int tempValue=array[k];   int j=k;   for(;j>=i&&tempValue<array[j-h];j-=h)    {                   array[j]=array[j-h];    }    array[j]=tempValue;   }   }   printResult(array);   }   h=(h-1)/3;   } }/**     *                                         * 輸出相應數組的結果 * @param array */private static void printResult(int[] array) {       for(int value:array)       System.out.print(" "+value+" ");      System.out.println();}/** * 交換數組中兩個變數的值 * @param array * @param i * @param j */private static void swap(int[] array,int i,int j){int temp=array[i];array[i]=array[j];array[j]=temp;}}

 

  

 

     

 

 

 

Java常見排序演算法之Shell排序

相關文章

聯繫我們

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