// 氣泡排序
// 比較兩個相鄰的元素,將值大的元素交換至右端
// n個數字要排序完成,總共進行n-1趟排序
function bubblesort(arr)
for(let i = 0; i < arr.length; i++)
} }return arr
}
// 選擇排序
// 每一次從待排序的資料元素中選出最小的乙個元素,存放在序列的開頭, 以此類推
// 第一次迴圈比較n-1次,第二次迴圈比較n-2次,依次類推,最後乙個元素不需要比較,因此共進行n- 1次迴圈,最後一次迴圈比較1次。
// 因此一共比較1+2+ ... +(n - 2)+(n - 1)次,求和得n2/2 - n/2 ,忽略係數,取最高指數項,該排序的時間複雜度為o(n2)
function selectsort(arr)
let minindex;
for(let i = 0; iarr[j])
} // 用找到的最小值與預設的做交換(min 與 mowmin交換, 也就是i與minindex交換)
let temp = arr[i]
arr[i] = arr[minindex]
arr[minindex] = temp
} return arr
}
// 插入排序
// 設索引i之前的為已排過序的, 讓arr[i]與之前的資料在乙個個比較
function insertsort(arr)
for (let i = 1; iarr[i])
} }return arr
}
// 快速排序
// 1. 從陣列中選擇乙個元素作為基準點
// 2. 排序陣列,所有比基準值小的元素擺放在左邊,而大於基準值的擺放在右邊。每次分割結束以後基準值會插入到中間去。
// 3. 最後利用遞迴,將擺放在左邊的陣列和右邊的陣列在進行一次上述的1和2操作。
function quicksort(arr)
let midlen = math.floor(arr.length / 2) // 取陣列長一半
let midvalue = arr.splice(midlen, 1) // 刪除,並取出中間值, 相當於摳出中間值
let left =
let right =
for(let i = 0; i < arr.length; i++) else
} return quicksort(left).concat(midvalue, quicksort(right))
}
經典演算法面試題
1 說是有乙個文字檔案,大約有一萬行,每行乙個詞,要求統計出其中最頻繁出現的前十個詞。先用雜湊,統計每個詞出現的次數,然後用在n個數中找出前k大個數的方法找出出現次數最多的前10個詞。2 如題1,但是這次檔案特別大,沒有辦法一次讀入記憶體。1 直接排序,寫檔案時,同時寫入字串及其出現次數。2 可以用...
經典演算法面試題
維護乙個1000個節點的小頂堆。時間複雜度o nlogk 具體步驟 1 將k個陣列的第乙個元素取出來,維護乙個小頂堆。2 彈出堆頂元素存入結果陣列中,並把該元素所在陣列的下乙個元素取出來壓入隊中。3 調整堆的結構,使其滿足小頂堆的定義。4 重複 2 3 直到合併完成。動態規劃 dp n m 表示n被...
C 經典演算法面試題
static intsum int x static void sort int nums console.writeline nums i 字典的定義 必須包含名空間system.collection.generic dictionary裡面的每乙個元素都是乙個鍵值對 由二個元素組成 鍵和值 鍵必...