世界上最快的排序算法 對(duì)程序員來(lái)說(shuō)最難的是寫代碼嗎?
對(duì)程序員來(lái)說(shuō)最難的是寫代碼嗎?對(duì)于高級(jí)程序員來(lái)說(shuō),一天可以完成10000行代碼,而編寫代碼是最不熟練的事情。對(duì)于程序員來(lái)說(shuō),最困難的是理解需求以及將自然語(yǔ)言轉(zhuǎn)換為數(shù)學(xué)語(yǔ)言的過(guò)程。這個(gè)詞就是形式化。早期
對(duì)程序員來(lái)說(shuō)最難的是寫代碼嗎?
對(duì)于高級(jí)程序員來(lái)說(shuō),一天可以完成10000行代碼,而編寫代碼是最不熟練的事情。
對(duì)于程序員來(lái)說(shuō),最困難的是理解需求以及將自然語(yǔ)言轉(zhuǎn)換為數(shù)學(xué)語(yǔ)言的過(guò)程。這個(gè)詞就是形式化。早期的程序員需要直接與用戶聯(lián)系,花費(fèi)大量的時(shí)間與用戶溝通,抽象出用戶所需要的功能和性能,組織整個(gè)系統(tǒng)的數(shù)據(jù)字典。現(xiàn)在很多公司把這部分工作交給產(chǎn)品經(jīng)理,這既是好事,也是壞事,所以程序員很難成長(zhǎng)成為老板。
其次,難點(diǎn)在于系統(tǒng)架構(gòu),包括通信協(xié)議、結(jié)構(gòu)分層、軟件重用和算法。一個(gè)公司總是需要有人來(lái)做,但它可能只需要一個(gè)人來(lái)做,通常是技術(shù)總監(jiān)。
請(qǐng)問(wèn)大神最奇葩的排序算法是什么?
我想向您介紹這個(gè)睡眠排序算法。您在4chan上匿名發(fā)布了這些代碼:
此算法的基本原理是為數(shù)組中的每個(gè)數(shù)據(jù)X創(chuàng)建一個(gè)新線程:
●睡眠時(shí)間X秒
●打印輸出X
所有數(shù)據(jù)將同時(shí)被排序。
它適用于所有非負(fù)值數(shù)據(jù)。
在網(wǎng)上論壇上很少看到這樣的排序算法。
快速排序算法在什么情況下性能會(huì)變的很差?
首先,它是一個(gè)排序算法。排序算法是將無(wú)序數(shù)據(jù)組合轉(zhuǎn)化為有序數(shù)據(jù)組合。有序數(shù)據(jù)組合的最大優(yōu)點(diǎn)是,當(dāng)你定位和采用數(shù)據(jù)時(shí),會(huì)非常方便,因?yàn)閿?shù)據(jù)是有序的,所以你可以避免代碼設(shè)計(jì)中很多不必要的麻煩,因?yàn)楫?dāng)你推斷數(shù)據(jù)之間的關(guān)系時(shí)會(huì)顯示無(wú)序的數(shù)據(jù)快速排序是一種排序,在最壞的情況下,它與其他排序方法沒(méi)有什么不同,但在最好的情況下,它將比一般的排序方法節(jié)省更多的時(shí)間。這里的一般排序是指:bubble、hill、insert等常規(guī)排序方法。實(shí)際上,我更喜歡插入,但是鏈表操作更方便,因?yàn)樗子诓僮?/p>
這個(gè)問(wèn)題的最佳時(shí)間復(fù)雜度是O(n)。所以如果一定要使用排序算法,如果標(biāo)題條件允許,請(qǐng)盡量選擇o(n)排序算法如bucket排序。另一種解決方案是構(gòu)建一個(gè)大小為10的堆,按順序遍歷數(shù)組,并在堆滿時(shí)移除最上面的元素。這樣,最多可獲得10個(gè)元素。時(shí)間復(fù)雜度為O(nlog10)。