常見排序演算法和查詢演算法

2021-10-06 02:08:44 字數 2485 閱讀 5350

時間複雜度:o(n^2),穩定

let arr = [3, 15, 9, 10, 1, 26, 2, 5];

for (let i = 0; i < arr.length - 1; i++)

}}console.log(arr); //[1, 2, 3, 5, 9, 10, 15, 26]

時間複雜度:o(n^2),不穩定

let arr = [3, 15, 9, 10, 1, 26, 2, 5];

for (let i = 0; i < arr.length - 1; i++)

}if (min != i)

}console.log(arr); //[1, 2, 3, 5, 9, 10, 15, 26]

時間複雜度:o(n^2),穩定

let arr = [3, 15, 9, 10, 1, 26, 2, 5];

for (let i = 0; i < arr.length - 1; i++)

arr[j] = temp;

}console.log(arr); //[1, 2, 3, 5, 9, 10, 15, 26]

時間複雜度:o(n^1.3),不穩定

let arr = [3, 15, 9, 10, 1, 26, 2, 5]

let length = arr.length;

let gap = math.floor(length / 2); //增量

while (gap >= 1)

arr[j] = temp;

}gap = math.floor(gap / 2);

}console.log(arr); //[1, 2, 3, 5, 9, 10, 15, 26]

時間複雜度:o(nlog2n),穩定

基本思想與過程:先遞迴的分解數列再合併數列(分治思想的典型應用)

(1)將乙個陣列拆成a、b兩個小組,兩個小組繼續拆,直到每個小組只有乙個元素為止。

(2)按照拆分過程逐步合併小組,由於各小組初始只有乙個元素,可以看做小組內部是有序的,合併小組可以被看做是合併兩個有序陣列的過程。

(3)對左右兩個小數列重複第二步,直至各區間只有1個數。

下面對陣列【42,20,17,13,28,14,23,15】進行歸併排序,模擬排序過程如下:

第一步:拆分陣列,一共需要拆分三次(logn);

第一次拆成【42,20,17,13】,【28,14,23,15】,

第二次拆成【42,20】,【17,13】,【28,14】,【23,15】,、

第三次拆成,,,,,,,;

第二步:逐步歸併陣列,採用合併兩個有序陣列的方法,每一步其演算法複雜度基本接近於o(n)

第一次歸併為【20,42】,【13,17】,【14,28】,【15,23】

第二次歸併為【13,17,20,42】,【14,15,23,28】,

第三次歸併為【13, 14, 15, 17, 20, 23, 28, 42】

let arr = [3, 15, 9, 10, 1, 26, 2, 5]

//分陣列

function mergesort()

//分陣列

function merge_1(arr) else

}//合陣列

function merge_2(leftarr, rightarr) else

}return mergearr.concat(leftarr, rightarr);

}mergesort()

時間複雜度:o(nlog2n),不穩定

let arr = [3, 15, 9, 10, 1, 26, 2, 5]

function quicksort()

function quick(arr)

let pivotindex = math.floor(length / 2); //找基準下標

let pivot = arr.splice(pivotindex, 1)[0]; //找基準

let left = ;

let right = ;

for (let i in arr) else

}return quick(left).concat(pivot, quick(right));

}quicksort()

let arr = [1, 2, 3, 5, 9, 10, 15, 26]

function binarysearch(key) else else

} }

return -1;

} let a=binarysearch(5);

console.log(a); //3

面試常見演算法 排序查詢演算法

常見面試問題總結目錄 演算法是程式設計師必被的乙個技能,在面試中常常出現,下面總結了面試中出現的常見演算法,這些演算法程式設計師應該牢記在心中,要非常熟練。原理 將陣列分為無序區和有序區兩個區,然後不斷將無序區的第乙個元素按大小順序插入到有序區中去,最終將所有無序區元素都移動到有序區完成排序。要點 ...

排序演算法和查詢演算法

法是用來解決常見問題的方法 同乙個問題可以採用多種方法解決,不同 方法適用於不同的環境 排序指的是把一組數字按照某種順序排列好 排序演算法分很多次重複執行,每次負責把 乙個數字放在合適的位置上 為了實現以上效果可以先確定數字然後查詢 位置也可以先確定位置然後查詢數字 通過不斷調整兩個數字的相互順序最...

排序演算法和查詢

排序和查詢例項 內部排序 交換式 冒泡 快速排序法 選擇式 選擇 堆排序 插入 插入 謝爾 二叉樹 式排序 外部排序 合併 直接合併排序 隨機產生陣列 public int getarray int n for int i 0 i 7.2選擇排序 選擇排序法 class xuanze if i mi...