java遞歸算法經(jīng)典實(shí)例 數(shù)組排序的最少時(shí)間復(fù)雜度O(nlog2n)怎么計(jì)算的?
數(shù)組排序的最少時(shí)間復(fù)雜度O(nlog2n)怎么計(jì)算的?二分法的基本思想如下:假設(shè)數(shù)據(jù)按升序排序。對(duì)于給定的值x,從序列的中間位置開(kāi)始。如果當(dāng)前位置值等于x,則搜索成功;如果x小于當(dāng)前位置值,則搜索在序
數(shù)組排序的最少時(shí)間復(fù)雜度O(nlog2n)怎么計(jì)算的?
二分法的基本思想如下:假設(shè)數(shù)據(jù)按升序排序。對(duì)于給定的值x,從序列的中間位置開(kāi)始。如果當(dāng)前位置值等于x,則搜索成功;如果x小于當(dāng)前位置值,則搜索在序列的前半部分;如果x大于當(dāng)前位置值,則搜索在序列的后半部分繼續(xù),直到找到為止。因?yàn)閿?shù)組是預(yù)先排序的,所以我們可以使用半查詢(xún)的方法,每次都丟棄一半要查詢(xún)的部分。這樣,長(zhǎng)度為n的數(shù)組只需要log2n查詢(xún),2是對(duì)數(shù)的基。例如,長(zhǎng)度為7的數(shù)組最多只能找到三次。O(log2n)只表示與log2n的數(shù)量級(jí)相同,因?yàn)榇嬖谏崛雴?wèn)題,在查詢(xún)過(guò)程中也有可能找到它(即半個(gè)查詢(xún)點(diǎn)就是要查詢(xún)的數(shù)據(jù)),所以o(log2n)是一個(gè)上限
冒泡排序算法的時(shí)間復(fù)雜度是o(n^2))冒泡排序是通過(guò)將所有要排序的數(shù)字放入工作列表來(lái)實(shí)現(xiàn)的。
從列表中的第一個(gè)數(shù)字到倒數(shù)第二個(gè)數(shù)字,逐一檢查:如果某個(gè)位上的數(shù)字大于下一個(gè)數(shù)字,則會(huì)與其下一個(gè)數(shù)字交換。
重復(fù)步驟2,直到無(wú)法再更換。
冒泡排序的平均時(shí)間復(fù)雜度與插入排序的平均時(shí)間復(fù)雜度相同,也是平方級(jí),但也很容易實(shí)現(xiàn)。
選擇排序選擇排序?qū)崿F(xiàn)如下:在數(shù)組內(nèi)存中設(shè)置n個(gè)要排序的數(shù)字,數(shù)組下標(biāo)從1開(kāi)始,到n結(jié)束。
從數(shù)組的第I個(gè)元素到第n個(gè)元素,I=1,找到最小的元素。
將上一步中找到的最小元素與第i個(gè)元素交換。
如果I=n-1,則算法結(jié)束,否則,排序的平均時(shí)間復(fù)雜度為O(n^2)。