色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

javascript 十大排序

李明濤1年前6瀏覽0評論

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ù)待排序元素中的每個元素的值來確定排序后該元素在序列中的位置。