希爾排序java

來源:互聯網
上載者:User

標籤:

希爾排序簡述  

希爾排序是基於插入排序的以下兩點性質而提出改進方法的:
  1. 插入排序在對幾乎已經排好序的資料操作時,效率高,即可以達到線性排序的效率。(希爾排序先將部分資料進行排序,相當於已經部分排好序)
  2. 但插入排序一般來說是低效的,因為插入排序每次只能將資料移動一位。(希爾排序先將間隔大的資料進行大的移位,後期的移位距離相對要小很多)

分析:

  先去一個小於n的整數的H作為第一個增量,把檔案的全部記錄分組。即將所有距離為H的倍數的記錄放在同一個族中,先在各組內進行直接插入排序;然後去第二個增量重複上述的分組和排序,直至所取的增量為1。

  例子:對7、10、1、9、2、5、8、6、4、3數組進行一增量為4的希爾排序過程,數組可以看成是由4個字數組組成(0、4、8)(1、5、9)(2、6)(3、7)。

 

 後面如果取增量為1的話,就是對整個數組進行插入排序。

  希爾排序的優點就是減少了插入排序的資料的大量複製和移動,同時也是效率得到了很大的提高。

實現代碼:

希爾排序類:

package com.dxx.order;import java.util.ArrayList;public class ShellSort {private int arrs[];//設定增量數組,公式為h=3*h+1,eg:1、4、13、40....找到接近數組長度但是小於它的增量為止private ArrayList<Integer> rises = new ArrayList<Integer>();public ShellSort(int[] arrs) {super();this.arrs = arrs;}//定義增量數組public void setRises(){int len = arrs.length;int h = 1;int count=0;while(true){if(h>=len){break;}rises.add(h);h = 2*h + 1;}}public void sortArrs(){int h,temp,len = rises.size();//根據增量依次進行排序for(int i=0; i<len;i++){h = rises.get(len-1-i);//對增量為h的數組進行排序arrs[h]for(int k=h;k<arrs.length;k++){//以冒泡排序的方式對一個增量為h的數組進行排序if(arrs[k]<arrs[k-h]){temp = arrs[k];while(k>=h && temp<arrs[k-h]){arrs[k] = arrs[k-h];k-=h;}arrs[k] = temp;k+=h;}}}}public void sortArrs2(){int group, i, j, temp;int len = arrs.length;        for (group = len / 2; group > 0; group /= 2)        {            for (i = group; i < len; i++)            {                for (j = i - group; j >= 0; j -= group)                {                    if (arrs[j] > arrs[j + group])                    {                        temp = arrs[j];                        arrs[j] = arrs[j + group];                        arrs[j + group] = temp;                    }                }            }        }}public void printArrs(){for(int i :arrs){System.out.print(i + "   ");}System.out.println();}}

主程式類:

package com.dxx.order;public class MainTest {public static void main(String[] args) {int arrs[] = {14,3,2,5,12,8,6,7,10,11,1,9,13};ShellSort shellSort = new ShellSort(arrs);shellSort.printArrs();shellSort.setRises();shellSort.sortArrs();shellSort.printArrs();}}

  

  

 

希爾排序java

相關文章

聯繫我們

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