日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

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

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

概述

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

 

直接插入排序

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

算法實現(xiàn)

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

 

時間復(fù)雜度

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

說明:穩(wěn)定的排序是指相等的元素經(jīng)過排序后,其相對位置沒有發(fā)生改變

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

 

希爾排序

基本思想

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

算法實現(xiàn)

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

 

時間復(fù)雜度

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

 

簡單選擇排序

基本思想

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

算法實現(xiàn):

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

 

時間復(fù)雜度:

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

不穩(wěn)定說明

假設(shè)待排元素序列是:6,4,6,7,2,9,第一次排序后,序列變成了2,4,6,7,6,9,我們可以發(fā)現(xiàn),經(jīng)過一次排序后,位置一的6調(diào)整到位置三的6的后面,所以簡單選擇排序是不穩(wěn)定的排序。

 

冒泡排序

基本思想

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

算法實現(xiàn):

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

 

時間復(fù)雜度:

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

 

快速排序

基本思想:

選擇一個基準(zhǔn)元素(通常選擇第一個元素或者最后一個元素),通過一次排序?qū)⒋判蛄蟹譃閮刹糠郑徊糠侄急然鶞?zhǔn)元素小,另一部分都比基準(zhǔn)元素大,然后再按此方法對這兩組數(shù)據(jù)分別進(jìn)行快速排序,直到待排序列有序。

算法實現(xiàn):

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

 

時間復(fù)雜度:

快速排序是不穩(wěn)定排序,時間復(fù)雜度是O(nlogn)

 

堆排序

基本思想:

堆的概念:

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

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

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

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

堆排序:

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

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

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

算法實現(xiàn):

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

 

時間復(fù)雜度

堆排序是不穩(wěn)定的排序,其時間復(fù)雜度是O(nlogn)

 

歸并排序

基本思想

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

算法實現(xiàn)

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

 

時間復(fù)雜度:

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

 

字基數(shù)排序

基本思想

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

算法實現(xiàn)

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

 

時間復(fù)雜度:

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

分享到:
標(biāo)簽:算法
用戶無頭像

網(wǎng)友整理

注冊時間:

網(wǎng)站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

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

數(shù)獨大挑戰(zhàn)2018-06-03

數(shù)獨一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運動步數(shù)有氧達(dá)人2018-06-03

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

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績評定2018-06-03

通用課目體育訓(xùn)練成績評定