經典面試題 JS常見的排序演算法

2021-10-24 15:59:06 字數 1379 閱讀 7343

// 氣泡排序

// 比較兩個相鄰的元素,將值大的元素交換至右端

// 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裡面的每乙個元素都是乙個鍵值對 由二個元素組成 鍵和值 鍵必...