JavaScript是一種常見的編程語言,在開發(fā)過程中,算法和排序是非常重要的。排序是指將數(shù)組中的元素按一定的規(guī)則進(jìn)行排序的過程。
下面是十大排序算法的介紹:
冒泡排序
function bubbleSort(arr){ for(let i=arr.length-1;i>0;i--){ for(let j=0;jarr[j+1]){ let temp = arr[j]; arr[j] = arr[j+1]; arr[j+1] = temp; } } } return arr; }
冒泡排序是一個簡單的排序算法。它重復(fù)地遍歷要排序的數(shù)列,一次比較兩個元素,如果它們的順序錯誤就把它們交換過來。
選擇排序
function selectionSort(arr){ for(let i=0;i選擇排序是一種簡單直觀的排序算法。它的工作原理是每次從待排序的數(shù)據(jù)元素中選擇最小(或最大)的一個元素作為首元素。
插入排序
function insertionSort(arr){ for(let i=1;i=0 && arr[j]>temp){ arr[j+1] = arr[j]; j--; } arr[j+1] = temp; } return arr; } 插入排序是一種簡單直觀的排序算法。它的工作原理是將一個記錄插入到已經(jīng)排好序的有序表中,從而得到一個新的有序表。
希爾排序
function shellSort(arr){ let len = arr.length, temp, gap = 1; while(gap< len/3){ gap = gap * 3 + 1; } while(gap >0){ for(let i=gap;i=0 && arr[j] >temp){ arr[j+gap] = arr[j]; j -= gap; } arr[j+gap] = temp; } gap = Math.floor(gap/3); } return arr; } 希爾排序是插入排序的一種更高效的改進(jìn)版本。它的工作原理是將數(shù)組劃分成一些小的子序列,然后對每個子序列進(jìn)行插入排序操作。
歸并排序
function mergeSort(arr){ if(arr.length< 2) return arr; let middle = Math.floor(arr.length/2), left = arr.slice(0,middle), right = arr.slice(middle); return merge(mergeSort(left),mergeSort(right)); } function merge(left,right){ let 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; }歸并排序是一種穩(wěn)定的排序算法。它的工作原理是將待排序的序列分成若干個子序列,每個子序列都是有序的,然后再將各個子序列合并成一個有序的序列。
快速排序
function quickSort(arr){ if(arr.length<= 1) return arr; let pivotIndex = Math.floor(arr.length/2); let pivot = arr.splice(pivotIndex,1)[0]; let left = [],right = []; for(let i=0;i快速排序是一個常用的排序算法。它的工作原理是通過一趟排序?qū)⒁判虻臄?shù)據(jù)分割成獨(dú)立的兩部分,其中一部分的所有數(shù)據(jù)都比另外一部分的所有數(shù)據(jù)都要小。
堆排序
function heapSort(arr){ let len = arr.length; buildHeap(arr); for(let i=len-1;i>0;i--){ swap(arr,0,i); len--; heapify(arr,0,len); } return arr; } function buildHeap(arr){ let len = arr.length; for(let i=Math.floor(len/2);i>=0;i--){ heapify(arr,i,len); } } function heapify(arr,i,len){ let left = 2 * i + 1, right = 2 * i + 2, largest = i; if(left< len && arr[left] >arr[largest]){ largest = left; } if(right< len && arr[right] >arr[largest]){ largest = right; } if(largest !== i){ swap(arr,i,largest); heapify(arr,largest,len); } } function swap(arr,i,j){ let temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; }堆排序是一種選擇排序。它的工作原理是將待排序的序列構(gòu)造成一個完全二叉樹,將根節(jié)點(diǎn)最大的值放在最后,然后重新構(gòu)造一個新的二叉樹,直到所有節(jié)點(diǎn)都遍歷完畢。
計(jì)數(shù)排序
function countingSort(arr,m){ let bucket = new Array(m).fill(0); let result = []; for(let i=0;i0){ result[j++] = i; bucket[i]--; } } return result; } 計(jì)數(shù)排序是一種非基于比較的排序算法。它的工作原理是根據(jù)待排序元素中的每個元素的值來確定排序后該元素在序列中的位置。