亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.430618.com 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

概述

排序分為內部排序和外部排序,內部排序是待排序的元素全部放在內存,并在內存中調整它們的順序。外部排序是部分元素放到內存中,在內外存間調整元素的順序。我們通常說的八大排序直接插入排序、希爾排序、簡單選擇排序、冒泡排序、快速排序、堆排序、歸并排序、基數排序都是內部排序,下面來具體介紹這八種排序的如何用JAVA實現,以及它們所需的時間復雜度和空間復雜度。

 

直接插入排序

基本思想:將一個待排序的元素插入到已經排好序的序列中,如果待排序的元素與有序序列的中的某個元素相等,則把待排序元素插到該元素后面。

算法實現

面試中八大常見排序算法(Java語言)

 

時間復雜度

直接插入排序是穩定的排序,其時間復雜度是O(n^2)

說明:穩定的排序是指相等的元素經過排序后,其相對位置沒有發生改變

說明:如果待排序的元素是正序(從小到大排列),每插入一個元素只需比較一次,這樣時間復雜度就是O(n)。反之,如果待排序的元素是逆序(從大到小排列),當插入第i個元素時,需要比較i次,這樣時間復雜度是O(n^2)

 

希爾排序

基本思想

希爾排序實質上是一種分組插入排序,其先將整個待排元素序列分割成若干個子序列(由距離為d的元素組成)分別進行直接插入排序,然后依次減少距離d再進行排序,當距離為1時,再對全體元素進行一次直接插入排序。

算法實現

面試中八大常見排序算法(Java語言)

 

時間復雜度

希爾排序中相同的元素可能在各自組的插入排序中移動,最后其穩定性會被打亂,所以希爾排序是不穩定的,其時間復雜度是O(nlogn)

 

簡單選擇排序

基本思想

在n個待排序的元素中找取最小的元素與第一個元素交換位置,然后在n-1個元素中找取最小的元素與第二元素交換位置,直到n=1為止。

算法實現:

面試中八大常見排序算法(Java語言)

 

時間復雜度:

簡單選擇排序是不穩定的排序,其時間復雜度是O(n^2)

不穩定說明

假設待排元素序列是:6,4,6,7,2,9,第一次排序后,序列變成了2,4,6,7,6,9,我們可以發現,經過一次排序后,位置一的6調整到位置三的6的后面,所以簡單選擇排序是不穩定的排序。

 

冒泡排序

基本思想

從待排序元素的倒數第一位開始向前遍歷,如果當前元素比前面元素小,則交換位置。這樣一次遍歷下來,最小的元素冒泡到第一個位置了,然后,從倒數第二位、第三位...開始向前遍歷,重復上面的過程,直到元素有序。

算法實現:

面試中八大常見排序算法(Java語言)

 

時間復雜度:

冒泡排序是穩定的排序,時間復雜度是O(n^2)

 

快速排序

基本思想:

選擇一個基準元素(通常選擇第一個元素或者最后一個元素),通過一次排序將待排序列分為兩部分,一部分都比基準元素小,另一部分都比基準元素大,然后再按此方法對這兩組數據分別進行快速排序,直到待排序列有序。

算法實現:

面試中八大常見排序算法(Java語言)

 

時間復雜度:

快速排序是不穩定排序,時間復雜度是O(nlogn)

 

堆排序

基本思想:

堆的概念:

n個元素的序列{k1,k2,…,kn}當且僅當滿足下列關系之一時,稱之為堆。

情形1:ki <= k2i 且ki <= k2i+1 (最小堆)

情形2:ki >= k2i 且ki >= k2i+1 (最大堆)

其中i=1,2,…,n/2向下取整;

堆排序:

把待排序的序列看作是一棵順序存儲的二叉樹,調整它們的存儲順序,使之成為一個最大堆,這時堆的根節點數最大。然后,將根節點與堆的最后一個節點交換,并對前面n-1個數重新調整使之成為堆,依此類推,最后得到有n個節點的有序序列。

從算法描述來看,堆排序需要兩個過程,一是建立堆,二是堆結果。

說明:若想得到升序序列,則建立最大堆,若想得到降序序列,則建立最小堆。

算法實現:

面試中八大常見排序算法(Java語言)

 

時間復雜度

堆排序是不穩定的排序,其時間復雜度是O(nlogn)

 

歸并排序

基本思想

是把待排序序列分為若干個子序列,每個子序列是有序的,然后再把有序子序列合并為整體有序序列。

算法實現

面試中八大常見排序算法(Java語言)

 

時間復雜度:

歸并排序是穩定的排序,其時間復雜度為O(nlogn)

 

字基數排序

基本思想

將所有待排序列(正整數)統一為同樣的數位長度,數位較短的數前面補零。然后 ,從最低位開始,依次進行一次排序。這樣,從最低位一直到最高位排序完成以后, 數列就變成一個有序序列。

算法實現

面試中八大常見排序算法(Java語言)

 

時間復雜度:

基數排序是穩定的排序,其時間復雜度為O(d(n+r)),d為位數,r為基數范圍。
 

分享到:
標簽:算法
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定