欧美一区二区三区,国内熟女精品熟女A片视频小说,日本av网,小鲜肉男男GAY做受XXX网站

javascript 排序算法

在前端開(kāi)發(fā)的時(shí)候,我們常常需要對(duì)數(shù)據(jù)進(jìn)行排序,從而更好的展示數(shù)據(jù)。在javascript中,有許多種排序算法可以使用,針對(duì)不同大小和類(lèi)型的數(shù)據(jù),可以選擇不同的算法進(jìn)行排序。下面,我們將會(huì)介紹一些常用的排序算法,并且通過(guò)具體的例子進(jìn)行說(shuō)明。

冒泡排序

function bubbleSort(arr) {
let len = arr.length;
for (let i = 0; i< len; i++) {
for (let j = 0; j< len - 1 - i; j++) {
if (arr[j] >arr[j + 1]) {
[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];
}
}
}
return arr;
}
let arr = [3, 1, 4, 2, 7, 5, 8, 6];
console.log(bubbleSort(arr)); // [1, 2, 3, 4, 5, 6, 7, 8]

冒泡排序是一種簡(jiǎn)單的排序算法,將相鄰的元素兩兩比較,如果前一個(gè)元素比后一個(gè)元素大,則交換兩個(gè)元素的位置。通過(guò)這種方式,每次都將最大的元素移動(dòng)到最后面,這樣就完成了一次排序。然后在對(duì)剩下的元素重復(fù)進(jìn)行相同的操作,最終就可以完成整個(gè)數(shù)組的排序。這種排序方式的時(shí)間復(fù)雜度為O(n^2),雖然效率低下,但是對(duì)于小數(shù)據(jù)量的排序,這是可以接受的。

選擇排序

function selectSort(arr) {
let len = arr.length;
let minIndex, temp;
for (let i = 0; i< len - 1; i++) {
minIndex = i;
for (let j = i + 1; j< len; j++) {
if (arr[j]< arr[minIndex]) {
minIndex = j;
}
}
[arr[i], arr[minIndex]] = [arr[minIndex], arr[i]];
}
return arr;
}
let arr = [3, 1, 4, 2, 7, 5, 8, 6];
console.log(selectSort(arr)); // [1, 2, 3, 4, 5, 6, 7, 8]

選擇排序是一種簡(jiǎn)單直觀的排序算法,它的基本思想是每一趟從待排序的數(shù)據(jù)元素中選擇出最小(或最大)的一個(gè)元素,放在已排好序數(shù)據(jù)的末尾,直到全部待排序的數(shù)據(jù)元素排完。與冒泡排序不同的是,選擇排序在每次交換元素時(shí),都只進(jìn)行一次交換,因此相較于冒泡排序,選擇排序可以減少交換元素的次數(shù)。然而,這種排序方式的時(shí)間復(fù)雜度仍然是O(n^2)。

快速排序

function quickSort(arr) {
function partition(arr, left, right) {
let pivot = arr[Math.floor((left + right) / 2)];
let i = left;
let j = right;
while (i<= j) {
while (arr[i]< pivot) {
i++;
}
while (arr[j] >pivot) {
j--;
}
if (i<= j) {
[arr[i], arr[j]] = [arr[j], arr[i]];
i++;
j--;
}
}
return i;
}
function sort(arr, left, right) {
if (arr.length >1) {
let index = partition(arr, left, right);
if (left< index - 1) {
sort(arr, left, index - 1);
}
if (index< right) {
sort(arr, index, right);
}
}
return arr;
}
return sort(arr, 0, arr.length - 1);
}
let arr = [3, 1, 4, 2, 7, 5, 8, 6];
console.log(quickSort(arr)); // [1, 2, 3, 4, 5, 6, 7, 8]

快速排序是一種高效的排序算法,其基本思想是通過(guò)一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都小。然后再按照此方法分別對(duì)這兩部分?jǐn)?shù)據(jù)進(jìn)行快速排序,以此達(dá)到整個(gè)數(shù)據(jù)變成有序序列的目的。快速排序的時(shí)間復(fù)雜度為O(nlogn)或O(n^2),具體時(shí)間復(fù)雜度的確定取決于樞軸元素的選擇方式??焖倥判蚴浅S玫母咝判蛩惴ㄖ唬蠖鄶?shù)編程語(yǔ)言中都有相應(yīng)的快速排序?qū)崿F(xiàn)。

總結(jié)

以上就是javascript中一些常用的排序算法,基于不同的需求和數(shù)據(jù)量可以選擇不同的算法進(jìn)行操作。這些算法雖然實(shí)現(xiàn)方式不同,但是都有類(lèi)似的時(shí)間復(fù)雜度。在實(shí)際開(kāi)發(fā)中,如果面對(duì)大規(guī)模的數(shù)據(jù)排序,可以采用一些高端優(yōu)化策略來(lái)進(jìn)一步提高效率。