java希爾排序演算法,java希爾排序

來源:互聯網
上載者:User

java希爾排序演算法,java希爾排序

原文:java希爾排序演算法 代碼:http://www.zuidaima.com/share/1550463279090688.htm

希爾排序演算法的基本思想是:先取一個小於n的整數d1作為第一個增量,把檔案的全部記錄分成d1個組。所有距離為dl的倍數的記錄放在同一個組中。先在各組內進行直接插人排序;然後,取第二個增量d2<d1重複上述的分組和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有記錄放在同一組中進行直接插入排序為止。該方法實質上是一種分組插入方法。

 

package com.zuidaima.sort;/***@author www.zuidaima.com**/public class ShellSort {      public static <T extends Comparable<? super T>> void shellSort(T[] array, int len) {          int d = len;          while (d > 1) {              d = (d + 1) / 2;              for (int i = 0; i < len - d; i++) {                  if (array[i + d].compareTo(array[i]) < 0) {                      T temp = array[i + d];                      array[i + d] = array[i];                      array[i] = temp;                  }              }          }      }            public static void main(String[] args) {          Integer[] testArray = {23, 25, 12, 42, 35};          ShellSort.shellSort(testArray, 5);          System.out.println("The result is:");          for (Integer item : testArray) {              System.out.print(item);              System.out.print(' ');          }      }  }  

 標籤: 演算法 希爾 排序 java sort話題: 語言基礎


對於JAVA希爾排序的問題

你排序給我看看!!!!!
邏輯都錯了!不是代碼的問題。
for(d = src.length/2;d>0; d = d/2)看看這句for迴圈。d = d/2永遠是d的一般,那不就越來越小了!!他怎麼去遍曆數組對比!。這個都是很明顯的問題,你絕對能看的出來。也想的到。但你沒有去研究它吧,一上來就問的?

public class shellsort {
static void sort(int[]a,int dk){
int i,j,temp;
for(i=dk;i<a.length;i++){
if(a[i]<a[i-dk]){
temp=a[i];
a[i]=a[i-dk];
for(j=i;j>0&&temp<a[j-1];j=j-dk){
a[j]=a[j-1];
}
a[j]=temp;
}
}
}
public static void main(String args[]){
int[]a={2,4,1,5,6,8,7};
int w=1;
while(w<=a.length/5){
sort(a,w);
w=w*5+1;
}
for(int i=0;i<a.length;i++){
System.out.print(a[i]+" ");
}
}
}
 
java 資料結構 希爾排序 解釋代碼

首先先用網上查來的資料解釋下希爾排序:
先取一個小於n的整數d1作為第一個增量,把檔案的全部記錄分成d1個組。所有距離為dl的倍數的記錄放在同一個組中。先在各組內進行直接插入排序;然後,取第二個增量d2<d1重複上述的分組和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有記錄放在同一組中進行直接插入排序為止。

然後說下希爾排序的實質:該方法實質上是一種分組插入方法。

再說下該排序好處:希爾排序的時間效能優於直接插入排序的原因:
①當檔案初態基本有序時直接插入排序所需的比較和移動次數均較少。
②當n值較小時,n和n2的差別也較小,即直接插入排序的最好時間複雜度O(n)和最壞時間複雜度0(n2)差別不大。
③在希爾排序開始時增量較大,分組較多,每組的記錄數目少,故各組內直接插入較快,後來增量di逐漸縮小,分組數逐漸減少,而各組的記錄數目逐漸增多,但由於已經按di-1作為距離排過序,使檔案較接近於有序狀態,所以新的一趟排序過程也較快。
因此,希爾排序在效率上較直接插人排序有較大的改進。

好了,開始解釋你的代碼。

首先 該代碼是以h的值為分組的。h = h*3 + 1; 和h = (h - 1)/3; 可以使h的值產生不同的值,就可以使數組分成幾組。然後就是在每個組裡進行插入排序方法。隨著h值的越來越小,排序也越來越細緻。當h=1時,就相當於在進行一次徹底插入排序。只不過這是整個隊列已經接近排序後的數組,所以要比直接用插入排序速度快。

這就是該代碼的精髓分析了。

該吃飯了。
 

聯繫我們

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