js十大排序演算法 下

2021-10-09 13:25:48 字數 3336 閱讀 2846

快速排序即找一基準,小於的放在左陣列,大於的放在右陣列,並連線,進行遞迴。

function

quicksort

(arr)

var num=math.

floor

(arr.length/2)

;//找到中間數的索引值,如果是浮點數,則向下取整

var newvalue=arr.

splice

(num,1)

;//找到中間數的值

var left=

,right=

;for

(var i=

0;i)else

}return

quicksort

(left)

.concat

(newvalue,

quicksort

(right));

//遞迴不斷重複比較,concat即連線陣列

} console.

log(

quicksort([

21,5,

45,12,

56,8]

));

堆排序類似完全二叉樹。利用堆頂元素最大的性質(但同行之間順序未排),將堆頂元素取出放入新陣列(迴圈時len–,視為新陣列)中,將堆底元素放置堆頂,並重構,迴圈。

var len;

function

buildmaxheap

(arr)

//對每乙個節點(非葉節點),做堆調整

}function

maxheapify

(arr, i)

if(right < len && arr[right]

> arr[largest])if

(largest != i)

}function

swap

(arr, i, j)

function

heapsort

(arr)

return arr;

}var arr =[46

,12,33

,72,68

,19,80

,33];

heapsort

(arr)

console.

log(

' after: '

+ arr)

;

計數排序要求資料集必須是已確定範圍的整數。

統計陣列中每個值為i的元素出現的次數,存入陣列c的第i項,填充陣列。

function

countingsort

(arr, maxvalue)

bucket[arr[i]]++

;}for(

var j =

0; j < bucketlen; j++)}

return arr;

}

桶排序利用了空間換時間的思想。即假設輸入資料服從均勻分布,將資料分到有限數量的桶裡,每個桶再分別排序,依次取出桶中資料。

/**

* 桶排序

* @param arr

* @param bucketsize

*/function

bucketsort

(arr, bucketsize =5)

/** * @description:

* @param arr=待排序資料

* @param bucketsize=桶大小

* @return:

*/function

createbucket

(arr, bucketsize)

else

if(arr[i]

> maxvalue)

}// 桶的個數

const bucketcount = math.

ceil

((maxvalue - minvalue)

/ bucketsize)

;// 建立桶,用二維陣列來儲存

const buckets =

;for

(let i =

0; i <= bucketcount; i++

)// 計算把資料放到哪個桶

for(

let i =

0; i < arr.length; i++

)return buckets;

}/**

* @description: 排序桶

* @param buckets

* @return:

*/function

sortbuckets

(buckets)

}return sortarray;

}/**

* @description: 插入排序

* @param arr

* @return: 排好序的arr

*/function

insertionsort

(arr)

else

} arr[j +1]

= key;

// 插入對應的位置

}return arr;

}// 隨機生成1000000個[1,100]區間內的整數

let arr1 = array.

from(,

item =>

(item = math.

floor

(math.

random()

* math.

floor

(100)+

1)))

;console.

time

("timer");

// console.log(`排序前的資料:$, 排序後的資料:$`);

bucketsort

(arr1,1)

;// 桶越小,排序越快,即桶個數越多,排序越快

console.

timeend

("timer"

);

基數排序即按照鍵值的每位數字分配桶。

先按照個位分配10個桶中,後按順序分到另一桶,再按照十位分配到10個桶中,進行迴圈。

var counter = ;

function radixsort(arr, maxdigit)

counter[bucket].push(arr[j]);

}var pos = 0;

for(var j = 0; j < counter.length; j++) }}

}return arr;

}

js十大排序演算法 氣泡排序

1 對於評述演算法優劣術語的說明 穩定 如果a原本在b前面,而a b,排序之後a仍然在b的前面 不穩定 如果a原本在b的前面,而a b,排序之後a可能會出現在b的後面 內排序 所有排序操作都在記憶體中完成 外排序 由於資料太大,因此把資料放在磁碟中,而排序通過磁碟和記憶體的資料傳輸才能進行 時間複雜...

十大排序演算法

1.非線性時間類排序 時間複雜度未突破 0 nlog 2n 不穩定的四個排序演算法 選擇排序 0 n2 希爾排序 0 n1.3 希爾排序實現python 快速排序 0 n log2 n 0 nlog 2n 0 nlog 2 n 快速排序實現c python 堆排序 0 n log2 n 0 nlog...

十大排序演算法

排序規則 從左至右依次增大 一 基於比較的排序演算法 插入排序 逐個遍歷未排序序列,將其在已排序序列中從右到左比較,直到遇到比自己小的數,然後將元素插入到那個數的後面,有序序列從左向右生長。選擇排序 在未排序序列中選擇最小的元素,將其插入到已排序序列的末尾,有序序列從左向右生長。氣泡排序 從左至右逐...