最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java 選擇排序、插入排序、希爾算法實例詳解

 更新時間:2017年05月05日 14:05:54   投稿:mrr  
這篇文章主要介紹了Java 選擇排序、插入排序、希爾算法實例詳解,需要的朋友可以參考下

       1、基本思想:

在要排序的一組數(shù)中,選出最小的一個數(shù)與第一個位置的數(shù)交換;然后在剩下的數(shù)當(dāng)中再找最小的與第二個位置的數(shù)交換,如此循環(huán)到倒數(shù)第二個數(shù)和最后一個數(shù)比較為止?! ?br />

  2、實例

  3、算法實現(xiàn)  

 /**
   * 選擇排序算法
   * 在未排序序列中找到最小元素,存放到排序序列的起始位置 
   * 再從剩余未排序元素中繼續(xù)尋找最小元素,然后放到排序序列末尾。 
   * 以此類推,直到所有元素均排序完畢。 
   * @param numbers
   */
  public static void selectSort(int[] numbers)
  {
  int size = numbers.length; //數(shù)組長度
  int temp = 0 ; //中間變量
  
  for(int i = 0 ; i < size ; i++)
  {
    int k = i;  //待確定的位置
    //選擇出應(yīng)該在第i個位置的數(shù)
    for(int j = size -1 ; j > i ; j--)
    {
    if(numbers[j] < numbers[k])
    {
      k = j;
    }
    }
    //交換兩個數(shù)
    temp = numbers[i];
    numbers[i] = numbers[k];
    numbers[k] = temp;
  }
  }

二、插入排序

  1、基本思想:每步將一個待排序的記錄,按其順序碼大小插入到前面已經(jīng)排序的字序列的合適位置(從后向前找到合適位置后),直到全部插入排序完為止。

  2、實例

  3、算法實現(xiàn)

 /** 
   * 插入排序
   * 
   * 從第一個元素開始,該元素可以認(rèn)為已經(jīng)被排序
   * 取出下一個元素,在已經(jīng)排序的元素序列中從后向前掃描 
   * 如果該元素(已排序)大于新元素,將該元素移到下一位置 
   * 重復(fù)步驟3,直到找到已排序的元素小于或者等于新元素的位置 
   * 將新元素插入到該位置中 
   * 重復(fù)步驟2 
   * @param numbers 待排序數(shù)組
   */ 
  public static void insertSort(int[] numbers)
  {
  int size = numbers.length;
  int temp = 0 ;
  int j = 0;
  
  for(int i = 0 ; i < size ; i++)
  {
    temp = numbers[i];
    //假如temp比前面的值小,則將前面的值后移
    for(j = i ; j > 0 && temp < numbers[j-1] ; j --)
    {
    numbers[j] = numbers[j-1];
    }
    numbers[j] = temp;
  }
  }

4、效率:

時間復(fù)雜度:O(n^2).

三、希爾算法

1、基本思想:

先將整個待排序的記錄序列分割成為若干子序列分別進(jìn)行直接插入排序,待整個序列中的記錄“基本有序”時,再對全體記錄進(jìn)行依次直接插入排序。

2、操作方法:

選擇一個增量序列t1,t2,…,tk,其中ti>tj,tk=1;

按增量序列個數(shù)k,對序列進(jìn)行k 趟排序;

每趟排序,根據(jù)對應(yīng)的增量ti,將待排序列分割成若干長度為m 的子序列,分別對各子表進(jìn)行直接插入排序。僅增量因子為1 時,整個序列作為一個表來處理,表長度即為整個序列的長度。

希爾排序的示例:

 3、算法實現(xiàn):

/**希爾排序的原理:根據(jù)需求,如果你想要結(jié)果從大到小排列,它會首先將數(shù)組進(jìn)行分組,然后將較大值移到前面,較小值
 * 移到后面,最后將整個數(shù)組進(jìn)行插入排序,這樣比起一開始就用插入排序減少了數(shù)據(jù)交換和移動的次數(shù),可以說希爾排序是加強(qiáng)
 * 版的插入排序
 * 拿數(shù)組5, 2, 8, 9, 1, 3,4來說,數(shù)組長度為7,當(dāng)increment為3時,數(shù)組分為兩個序列
 * 5,2,8和9,1,3,4,第一次排序,9和5比較,1和2比較,3和8比較,4和比其下標(biāo)值小increment的數(shù)組值相比較
 * 此例子是按照從大到小排列,所以大的會排在前面,第一次排序后數(shù)組為9, 2, 8, 5, 1, 3,4
 * 第一次后increment的值變?yōu)?/2=1,此時對數(shù)組進(jìn)行插入排序,
 *實現(xiàn)數(shù)組從大到小排
 */
  public static void shellSort(int[] data) 
  {
    int j = 0;
    int temp = 0;
    //每次將步長縮短為原來的一半
    for (int increment = data.length / 2; increment > 0; increment /= 2)
    {
    for (int i = increment; i < data.length; i++) 
    {
      temp = data[i];
      for (j = i; j >= increment; j -= increment) 
      {
      if(temp > data[j - increment])//如想從小到大排只需修改這里
      {  
        data[j] = data[j - increment];
      }
      else
      {
        break;
      }
      } 
      data[j] = temp;
    }
    }
  }

 4、效率

 時間復(fù)雜度:O(n^2). 

4、各種算法的時間復(fù)雜度

以上所述是小編給大家介紹的Java 選擇排序、插入排序、希爾算法實例詳解,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • Java異常架構(gòu)和異常關(guān)鍵字圖文詳解

    Java異常架構(gòu)和異常關(guān)鍵字圖文詳解

    Java異常是Java提供的一種識別及響應(yīng)錯誤的一致性機(jī)制,下面這篇文章主要給大家介紹了關(guān)于Java異常架構(gòu)和異常關(guān)鍵字的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • Java利用反射自動封裝成實體對象的方法

    Java利用反射自動封裝成實體對象的方法

    這篇文章主要介紹了Java利用反射自動封裝成實體對象的方法,可實現(xiàn)自動封裝成bean對象功能,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-01-01
  • 深扒Java中POJO、VO、DO、DTO、PO、BO、AO、DAO的概念和區(qū)別以及如何應(yīng)用

    深扒Java中POJO、VO、DO、DTO、PO、BO、AO、DAO的概念和區(qū)別以及如何應(yīng)用

    po vo bo dto dao 和 pojo 是軟件開發(fā)中經(jīng)常使用的一些概念,用于設(shè)計和實現(xiàn)對象模型,下面將分別解釋這些概念的含義及其在開發(fā)中的應(yīng)用,這篇文章主要給大家介紹了關(guān)于Java中POJO、VO、DO、DTO、PO、BO、AO、DAO的概念和區(qū)別以及如何應(yīng)用的相關(guān)資料,需要的朋友可以參考下
    2024-08-08
  • Spring源碼如何修改Bean的屬性用到的相關(guān)類

    Spring源碼如何修改Bean的屬性用到的相關(guān)類

    這篇文章主要介紹了Spring源碼如何修改Bean的屬性用到的相關(guān)類,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • java實現(xiàn)兩個對象之間傳值及簡單的封裝

    java實現(xiàn)兩個對象之間傳值及簡單的封裝

    這篇文章主要介紹了java實現(xiàn)兩個對象之間傳值及簡單的封裝,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 軟件開發(fā)基礎(chǔ)之設(shè)計模式概述

    軟件開發(fā)基礎(chǔ)之設(shè)計模式概述

    這篇文章介紹了軟件開發(fā)基礎(chǔ)之設(shè)計模式,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-09-09
  • 解決Spring?Boot應(yīng)用打包后文件訪問問題

    解決Spring?Boot應(yīng)用打包后文件訪問問題

    在Spring Boot項目的開發(fā)過程中,一個常見的挑戰(zhàn)是如何有效地訪問和操作資源文件,本文就來介紹一下解決Spring?Boot應(yīng)用打包后文件訪問問題,感興趣的可以了解一下
    2024-01-01
  • spring?boot只需兩步優(yōu)雅整合activiti示例解析

    spring?boot只需兩步優(yōu)雅整合activiti示例解析

    這篇文章主要主要來教大家spring?boot優(yōu)雅整合activiti只需兩步就可完成測操作示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助祝大家多多進(jìn)步
    2022-03-03
  • Java中String類的一些常見方法總結(jié)

    Java中String類的一些常見方法總結(jié)

    這篇文章主要給大家介紹了關(guān)于Java中String類的一些常見方法,文中包括了Java中String類的基本概念、構(gòu)造方式、常用方法以及StringBuilder和StringBuffer的使用,涵蓋了字符串操作的各個方面,包括查找、轉(zhuǎn)換、比較、替換、拆分、截取等,需要的朋友可以參考下
    2024-11-11
  • springboot驗證碼的生成與驗證的兩種方法

    springboot驗證碼的生成與驗證的兩種方法

    本文主要介紹了springboot驗證碼的生成與驗證的兩種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06

最新評論

志丹县| 晋城| 隆子县| 天长市| 清苑县| 吉隆县| 郴州市| 封丘县| 芮城县| 炎陵县| 布尔津县| 铁岭市| 衡东县| 黄平县| 环江| 颍上县| 红河县| 城步| 克拉玛依市| 托里县| 松江区| 连城县| 广饶县| 邓州市| 商南县| 紫云| 乌鲁木齐市| 海丰县| 财经| 武乡县| 成安县| 万荣县| 朝阳区| 山东| 乃东县| 凌源市| 乳源| 申扎县| 兴山县| 苗栗县| 广河县|