激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - 用Java實現(xiàn)希爾排序的示例

用Java實現(xiàn)希爾排序的示例

2019-10-20 23:13java教程網(wǎng) Java教程

問題:現(xiàn)有一段程序S,可以對任意n個數(shù)進行排序。如果現(xiàn)在需要對n^2個數(shù)進行排序,最少需要調(diào)用S多少次?只允許調(diào)用S,不可以做別的操作。我們用希爾排序來做解決這個

一.理論準(zhǔn)備
 希爾排序(Shell Sort)是插入排序的一種,是針對直接插入排序算法的改進,是將整個無序列分割成若干小的子序列分別進行插入排序,希爾排序并不穩(wěn)定。該方法又稱縮小增量排序,因DL.Shell于1959年提出而得名。
基本思想:先取一個小于n的整數(shù)d1作為第一個增量,把文件的全部記錄分成d1個組。所有距離為d1的倍數(shù)的記錄放在同一個組中。先在各組內(nèi)進行直接插入排序;然后,取第二個增量d2<d1重復(fù)上述的分組和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有記錄放在同一組中進行直接插入排序為止。
希爾排序的時間性能優(yōu)于直接插入排序的原因: 
①當(dāng)文件初態(tài)基本有序時直接插入排序所需的比較和移動次數(shù)均較少。 
②當(dāng)n值較小時,n和n2的差別也較小,即直接插入排序的最好時間復(fù)雜度O(n)和最壞時間復(fù)雜度0(n2)差別不大。 
③在希爾排序開始時增量較大,分組較多,每組的記錄數(shù)目少,故各組內(nèi)直接插入較快,后來增量di逐漸縮小,分組數(shù)逐漸減少,而各組的記錄數(shù)目逐漸增多,但由于已經(jīng)按di-1作為距離排過序,使文件較接近于有序狀態(tài),所以新的一趟排序過程也較快。 
 因此,希爾排序在效率上較直接插人排序有較大的改進。
增量序列的選擇:Shell排序的執(zhí)行時間依賴于增量序列。 
好的增量序列的共同特征(查到的資料都這么講): 
① 最后一個增量必須為1; 
② 應(yīng)該盡量避免序列中的值(尤其是相鄰的值)互為倍數(shù)的情況。      
看到了這個,我想試試希爾排序,就學(xué)學(xué)。

復(fù)制代碼代碼如下:


public class ShellSort {
 public static void main(String[] args) {

  int[] arr = new int[]{44,33,99,10,30,20,59,78,23,48};
  System.out.print("排序前:");
  for(int o: arr) {
   System.out.print(o+" ");
  }
  System.out.println();
  shellSort(arr);
  System.out.print("排序后:");
  for(int o: arr) {
   System.out.print(o+" ");
  }
  System.out.println();
 }
 private static void shellSort(int[] arr) {

  int j;
  int len = arr.length;
  for(int val=len>>1; val>0; val>>=1) {
   //下面是對本次的所有分組做直接插入排序
   for(int i=val; i<len; i++) {
    int temp = arr[i];
    /*
     * 為什么每次都用temp比較呢?
     * 因為直接插入就是找到temp的合適位置。
     * 為什么temp<arr[j-val]這個條件可以放在for內(nèi)呢?
     * 因為原來的組內(nèi)數(shù)據(jù)已經(jīng)有序,找到位置就停止便是。
     * 不甚理解的去看直接插入排序吧。
     */
    for(j=i; j>=val&&temp<arr[j-val]; j-=val) {
     /*
      * 為什么是arr[j-val]不是arr[j]呢?
      * 因為j=i開始的,而且條件是j>=val&&temp<arr[j-val]
      */
     arr[j] = arr[j-val];
    }
    /*
     * 注意不是arr[i] = temp
     * 直接插入排序也是這樣的。
     * 為什么呢?
     * 因為j是位置,i是待插入元素
     */
    arr[j] = temp;
   }
  }
 }
}


三.問題
希爾排序一定正確么?換句話說如何選取增量序列才能保證正確(包括長度、值)?是的,最后一次只要保證增量是1就ok(不管序列長度,只不過效率就低了),若是序列只有1,那就是直接插入排序了,不知道對否。

延伸 · 閱讀

精彩推薦
  • Java教程Java list.remove( )方法注意事項

    Java list.remove( )方法注意事項

    這篇文章主要介紹了Java list.remove( )方法注意事項,非常簡單易懂,需要的朋友可以參考下...

    妖久9552021-05-25
  • Java教程JavaWeb 實現(xiàn)驗證碼功能(demo)

    JavaWeb 實現(xiàn)驗證碼功能(demo)

    在 WEB-APP 中一般應(yīng)用于:登錄、注冊、買某票、秒殺等場景,大家都接觸過這個驗證碼操作,今天小編通過實例代碼給大家講解javaweb實現(xiàn)驗證碼功能,需要...

    java教程網(wǎng)12832020-08-05
  • Java教程Java之Springcloud Feign組件詳解

    Java之Springcloud Feign組件詳解

    這篇文章主要介紹了Java之Springcloud Feign組件詳解,本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下...

    深情以改10322021-11-12
  • Java教程java 中鎖的性能提高辦法

    java 中鎖的性能提高辦法

    這篇文章主要介紹了java 中鎖的性能提高辦法的相關(guān)資料,需要的朋友可以參考下...

    Java之家3092020-08-13
  • Java教程淺談Java(SpringBoot)基于zookeeper的分布式鎖實現(xiàn)

    淺談Java(SpringBoot)基于zookeeper的分布式鎖實現(xiàn)

    這篇文章主要介紹了Java(SpringBoot)基于zookeeper的分布式鎖實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的...

    LJY_SUPER5742021-07-21
  • Java教程springboot ehcache 配置使用方法代碼詳解

    springboot ehcache 配置使用方法代碼詳解

    EhCache是一個比較成熟的Java緩存框架,Springboot對ehcache的使用非常支持,所以在Springboot中只需做些配置就可使用,且使用方式也簡易,今天給大家分享spri...

    m1719309529412912021-09-16
  • Java教程JAVA中通過自定義注解進行數(shù)據(jù)驗證的方法

    JAVA中通過自定義注解進行數(shù)據(jù)驗證的方法

    java 自定義注解驗證可自己添加所需要的注解,下面這篇文章主要給大家介紹了關(guān)于JAVA中通過自定義注解進行數(shù)據(jù)驗證的相關(guān)資料,文中通過示例代碼介紹...

    Decouple6362021-05-25
  • Java教程SpringBoot引入Thymeleaf的實現(xiàn)方法

    SpringBoot引入Thymeleaf的實現(xiàn)方法

    這篇文章主要介紹了SpringBoot引入Thymeleaf的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下...

    Bobby6472021-07-28
主站蜘蛛池模板: av电影网在线观看 | 欧美精品成人一区二区在线观看 | 一级黄色播放 | 成人免费精品视频 | 国产亚洲高清在线精品不卡 | 999久久国产| 12av毛片 | 久章草在线视频 | 成人资源在线 | 欧美巨乳在线观看 | 综合精品 | 国产精品久久久av | 免费黄网站在线播放 | 日本精品视频一区二区三区四区 | 国产一级毛片av | 亚洲精品av在线 | 久久人人爽人人爽人人片av高清 | 成年人在线视频免费 | 欧美一级高清片_欧美高清aa | 国产成人免费精品 | 亚洲视频观看 | 国产papa | 亚洲天堂第一页 | 国产69精品久久久久久野外 | 99久久精约久久久久久清纯 | 国产精品探花在线观看 | 最新se94se在线欧美 | 国产欧美精品综合一区 | 亚州综合图片 | 欧美一二区视频 | 性欧美极品xxxx欧美一区二区 | 偿还电影免费看 | 国产系列 视频二区 | av在线直播观看 | 一级成人毛片 | 日本xxxx色视频在线观看免费, | 99热草 | 一级毛片在线免费观看 | h视频在线免费看 | 免费观看视频在线观看 | 天天草夜夜骑 |