在JavaScript中,數(shù)字?jǐn)?shù)組排序是一項(xiàng)常規(guī)任務(wù)。當(dāng)需要從數(shù)字?jǐn)?shù)組中找到最大值,或按照升序或降序排列時(shí),會(huì)用到排序。JavaScript提供了多種排序算法,包括冒泡排序、選擇排序、插入排序、快速排序、歸并排序等。下面我們將簡(jiǎn)單介紹其中的幾種排序算法。
冒泡排序算法是一種簡(jiǎn)單的排序算法,其基本思路是多次重復(fù)遍歷待排序的數(shù)列,比較相鄰兩個(gè)數(shù)的大小,若大小不符合規(guī)定,則交換這兩個(gè)數(shù)的位置。以升序排序?yàn)槔?/p>
function bubbleSort(arr) { var len = arr.length; for (var i = 0; i< len - 1; i++) { for (var j = 0; j< len - i - 1; j++) { if (arr[j] >arr[j + 1]) { var temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; } } } return arr; } var arr = [3, 7, 1, 9, 6, 2]; console.log(bubbleSort(arr)); // [1, 2, 3, 6, 7, 9]
選擇排序算法中,對(duì)于長(zhǎng)度為N的數(shù)列,第一輪從第一個(gè)數(shù)到第N個(gè)數(shù)中選出最小的數(shù),與第一個(gè)數(shù)交換位置;第二輪從第二個(gè)數(shù)到第N個(gè)數(shù)中選出最小的數(shù),與第二個(gè)數(shù)交換位置;以此類(lèi)推,共進(jìn)行N-1輪,最終得到升序排列的數(shù)列。
function selectionSort(arr) { var len = arr.length; for (var i = 0; i< len - 1; i++) { var minIndex = i; for (var j = i + 1; j< len; j++) { if (arr[j]< arr[minIndex]) { minIndex = j; } } if (minIndex != i) { var temp = arr[minIndex]; arr[minIndex] = arr[i]; arr[i] = temp; } } return arr; } var arr = [3, 7, 1, 9, 6, 2]; console.log(selectionSort(arr)); // [1, 2, 3, 6, 7, 9]
插入排序算法的基本思想是將一組數(shù)據(jù)分為有序區(qū)和無(wú)序區(qū),在無(wú)序區(qū)取出一個(gè)數(shù)據(jù)插入到有序區(qū)的合適位置,長(zhǎng)度為N的數(shù)列共需要進(jìn)行N-1輪插入操作。
function insertionSort(arr) { var len = arr.length; for (var i = 1; i< len; i++) { var j = i; while (j >0 && arr[j]< arr[j - 1]) { var temp = arr[j]; arr[j] = arr[j - 1]; arr[j - 1] = temp; j--; } } return arr; } var arr = [3, 7, 1, 9, 6, 2]; console.log(insertionSort(arr)); // [1, 2, 3, 6, 7, 9]
快速排序算法是一種常用的排序算法,基本思想是通過(guò)一趟排序?qū)⒋庞涗浄指畛瑟?dú)立的兩部分,其中一部分記錄的關(guān)鍵字均比另一部分的關(guān)鍵字小,然后繼續(xù)對(duì)兩部分記錄進(jìn)行排序,以達(dá)到整個(gè)序列有序的目的。
function quickSort(arr) { if (arr.length<= 1) { return arr; } var pivotIndex = Math.floor(arr.length / 2); var pivot = arr.splice(pivotIndex, 1)[0]; var left = []; var right = []; for (var i = 0; i< arr.length; i++) { if (arr[i]< pivot) { left.push(arr[i]); } else { right.push(arr[i]); } } return quickSort(left).concat([pivot], quickSort(right)); } var arr = [3, 7, 1, 9, 6, 2]; console.log(quickSort(arr)); // [1, 2, 3, 6, 7, 9]
歸并排序算法是一種分治算法,將原始數(shù)組分成較小數(shù)組,然后遞歸地排序每個(gè)較小的數(shù)組,并將這些數(shù)組合并為較大的數(shù)組,直到整個(gè)數(shù)組排序完成。
function mergeSort(arr) { if (arr.length<= 1) { return arr; } var mid = Math.floor(arr.length / 2); var left = arr.slice(0, mid); var right = arr.slice(mid); return merge(mergeSort(left), mergeSort(right)); } function merge(left, right) { var result = []; while (left.length && right.length) { if (left[0]< right[0]) { result.push(left.shift()); } else { result.push(right.shift()); } } while (left.length) { result.push(left.shift()); } while (right.length) { result.push(right.shift()); } return result; } var arr = [3, 7, 1, 9, 6, 2]; console.log(mergeSort(arr)); // [1, 2, 3, 6, 7, 9]
以上便是JavaScript中常用的幾種排序算法,在實(shí)際開(kāi)發(fā)過(guò)程中可以結(jié)合具體場(chǎng)景選擇合適的排序算法,提高代碼效率。