五分鐘學演算法之經典演算法題 :排序演算法(某東演算法工程師比賽)
題目描述
已知資料表 A 中每個元素距其最終位置 不遠 ,為了節省時間,應該採取的演算法是()
A、直接選擇排序
B、直接插入排序
C、堆排序
D、快速排序
題目分析
我們在之前學習 希爾排序 演算法的時候提及到,希爾排序進行到一定階段(每個元素距離其最終位置不遠時)一般都使用 插入排序 來收尾。
如果知道這個很容易知道答案選 B 。
我們也可以通過分析這四個選項的時間複雜度來做判斷。
選擇排序:對於 n 個元素,每次都需要遍歷 n 次(與元素偏移位置沒有什麼關係),時間複雜度為 O(n2)
插入排序:對於 n 個元素,如果每個元素距離其最終位置平均偏移 c 個單位,則每次比較 c 次,一共比較 n 趟,時間複雜度為 O(cn)。
堆排序:對於 n 個元素,使用堆排序無論元素的位置如何排放時間複雜度都是 O(nlog(n))。
快速排序:對於 n 個元素,即使每次選定的標定點很合適,它的最好時間複雜度也是 O(nlog(n))。
當然,如果你熟悉它們的最好情況下的時間複雜度也是能立馬得出答案的。
更多內容
你可以在電腦端訪問我的個人部落格下的專題 經典演算法題 來閱讀更多相關的面試題。
專題地址:https://www.cxyxiaowu.com/jingdiansuanf
相關推薦
五分鐘學演算法之經典演算法題 :排序演算法(某東演算法工程師比賽)
題目描述 已知資料表 A 中每個元素距其最終位置 不遠 ,為了節省時間,應該採取的演算法是() A、直接選擇排序 B、直接插入排序 C、堆排序 D、快速排序 題目分析 我們在之前學習 希爾排序 演算法的時候提及到,希爾排序進行到一定階段(每個元素距離其最終位置不遠時)一般都使用 插入排序 來收尾。 如果知
【演算法】計算機圖形學的一些經典小題:判斷點在多邊形內,隨機生成三角形內的點,判斷兩個矩形是否相交等
前幾天面試的時候被問到了,如何隨機在三角形內生成點,我按照我的想法回答了一遍,但覺得回答的不夠好。最後面試官說了一個最優的方法。覺得不錯,順帶總結一下最近看到的一些關於計算機圖形學方面的經典小題,知乎上看到的還有Leetcode上的 1.判斷一個點
演算法之每日一題:哥德巴赫猜想
#include<stdio.h> #include<math.h> //是否是素數 int is(int x){ int k=sqrt((float)x); int
《Nodejs開發加密貨幣》之二十四:DPOS機制(分散式共識演算法)
前言 共識機制是分散式應用軟體特有的演算法機制。在中心化的軟體裡,再複雜的問題都可以避開使用複雜的演算法邏輯(當然,如果能用演算法統領,程式碼會更加簡潔、高效),在開發設計上可以省卻一定的麻煩。但在分散式軟體開發中,節點間的互操作,節點行為的統一管理,沒有演算
從零開始學Android之 AutoCompleteView 動態匹配輸入的內容(像搜尋引擎上的匹配)
1.AutoCompleteTextView屬性: 1>動態匹配輸入的內容 2>android:completionThreshold="n" -- 輸入n個字元開始匹配 在ac
演算法之經典圖演算法
圖介紹 圖:是一個頂點集合加上一個連線不同頂點對的邊的集合組成。定義規定不允許出現重複邊(平行邊)、連線到頂點自身的邊(自環),定義了一個簡單圖。 自環:連線到頂點自身的邊。 平行邊:連線同一對頂點的兩條邊,含有平行邊的圖稱為多重圖。
五分鐘學GIS | 大資料之分散式空間分析服務
分散式空間分析服務是什麼 分散式空間分析服務是SuperMap iServer 9D中新增的一個擴充套件模組,其利用Spark分散式計算方式,對超大體量的空間資料進行各種分析。可接入分散式儲存的地理資料,如 HDFS(Hadoop Distrib
經典演算法之動態規劃(一):入門級動態規劃
終於要寫高大上的動態規劃啦~~雖然面對高難度的題目還是沒底,但是簡單的可用一維陣列記錄各子問題的解的入門級動態規劃是已經OK的啦~下面以一個鋼條切割的問題為例來講述動態規劃。 假設一公司進了一批長為10的鋼條,打算切割然後去賣,各種長度的鋼條的價格如下表: 1 2 3 4
資料結構與演算法之經典排序
1 經典演算法對比 2 衡量演算法的優劣指標 2.1 三大指標 (1)時間複雜度:主要是分析關鍵字的比較次數和記錄的移動次數。 (2)空間複雜度:分析排序演算法中需要多少輔助記憶體 (3)穩定性:假定在待排序的記錄序列中,存在多個具有相
資料結構與演算法之美專欄學習筆記-排序(上)
排序方法 氣泡排序、插入排序、選擇排序、快速排序、歸併排序、計數排序、基數排序、桶排序。 複雜度歸類 氣泡排序、插入排序、選擇排序 O(n^2) 快速排序、歸併排序 O(nlogn) 計數排序、基數排序、桶排序 O(n) 演算法的執行效率 1. 最
資料結構與演算法之美專欄學習筆記-排序(下)
分治思想 分治思想 分治,顧明思意就是分而治之,將一個大問題分解成小的子問題來解決,小的子問題解決了,大問題也就解決了。 分治與遞迴的區別 分治演算法一般都用遞迴來實現的。分治是一種解決問題的處理思想,遞迴是一種程式設計技巧。 歸併排序 演算法原理 歸併的思想 先把陣列從中間分
資料結構與演算法之美專欄學習筆記-排序優化
選擇合適的排序演算法 回顧 選擇排序演算法的原則 1)線性排序時間複雜度很低但使用場景特殊,如果要寫一個通用排序函式,不能選擇線性排序。 2)為了兼顧任意規模資料的排序,一般會首選時間複雜度為O(nlogn)的排序演算法來實現排序函式。 3)同為O(nlogn)的快排和歸併排序相比,
演算法之0——簡化版桶排序
看了《啊哈!演算法》一書,打算寫點讀書筆記,記錄一下。 先說說桶排序,先說說超級簡化版本的桶排序: /** * 簡化桶排序,以簡單的整型為例,數值是多少,就在陣列下標相同(桶)的數加一;例如取到數13,那麼就a[13]++; * 然後迴圈桶,輸出值大於0的角標(1輸出1次,2
資料結構與演算法之美-堆和堆排序
堆和堆排序 如何理解堆 堆是一種特殊的樹,只要滿足以下兩點,這個樹就是一個堆。 ①完全二叉樹,完全二叉樹要求除了最後一層,其他層的節點個數都是滿的,最後一層的節點都靠左排列。 ②樹中每一個結點的值都必須大於等於(或小於等於)其子樹中每個節點的值。大於等於的情況稱為大頂堆,小於等於的情況稱為小頂堆。
藍書(演算法競賽進階指南)刷題記錄——CH#56C(樹上差分+set維護)
題目:CH#56C. 題目大意:給定一棵樹,維護一個點集,支援: 1.給點集加一個樹點. 2.給點集刪一個樹點. 3.詢問將點集中所有樹點連線起來的連通塊的最小邊集總長度. 這道題看起來毫無思緒,但是仔細想就可以得出一些性質. 我們考慮將點集中所有點按照dfs序排序並連成
資料結構實驗之圖論六:村村通公路【Prim演算法】(SDUT 3362)
題解:選點,選最小權的邊,更新點權。可以手動自行找一遍怎麼找到這個最小的生成樹,隨便選一個點放入我們選的集合中,然後看和這個點相連的點中,與那個點相連的那條邊權值是最小的,選擇之後,把相連的這個點一起放入集合中,這樣的話集合中就多了一點,現在要找和這兩個點都相連的點中,那個邊的權最小,直到全部的
LeetCode演算法題-Binary Tree Paths(Java實現-3種解法)
這是悅樂書的第199次更新,第206篇原創 01 看題和準備 今天介紹的是LeetCode演算法題中Easy級別的第62題(順位題號是257)。給定二叉樹,返回所有根到葉路徑。例如: 輸入: 1 / \ 2 3 \ 5 輸出:[“1-> 2-> 5”,“1-> 3
LeetCode演算法題-First Bad Version(Java實現-三種解法)
這是悅樂書的第200次更新,第210篇原創 01 看題和準備 今天介紹的是LeetCode演算法題中Easy級別的第66題(順位題號是278)。您是產品經理,目前領導團隊開發新產品。不幸的是,您產品的最新版本未通過質量檢查。由於每個版本都是基於以前的版本開發的,因此壞版本之後的所有版本也是壞的。 假設
LeetCode演算法題-Power Of Three(Java實現-七種解法)
這是悅樂書的第204次更新,第215篇原創 01 看題和準備 今天介紹的是LeetCode演算法題中Easy級別的第71題(順位題號是326)。給定一個整數,寫一個函式來確定它是否為3的冪。例如: 輸入:27 輸出:true 輸入:0 輸出:false 輸入:9 輸出:true 輸入:45 輸出
LeetCode演算法題-Power of Four(Java實現-六種解法)
這是悅樂書的第205次更新,第216篇原創 01 看題和準備 今天介紹的是LeetCode演算法題中Easy級別的第72題(順位題號是342)。給定一個整數(帶符號的32位),寫一個函式來檢查它是否為4的冪。例如: 輸入:16 輸出:true 輸入:5 輸出:false 跟進:你可以在沒有迴圈/遞