日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > javascript >内容正文

javascript

JavaScript 几种排序算法实现(冒泡、选择、插入、归并、快速排序)

發布時間:2024/1/17 javascript 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JavaScript 几种排序算法实现(冒泡、选择、插入、归并、快速排序) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1. 冒泡

// 冒泡 - 每次循環, 將兩兩中偏大的元素移動到右邊 for (let i = 0; i < arr.length - 1; i++) {for (let j = i; j < arr.length; j++) {if (arr[i] > arr[j]) {[arr[i], arr[j]] = [arr[j], arr[i]]}} } console.log(arr)

?

??

2. 選擇排序

選擇排序算法是一種原址比較排序算法。選擇排序大致的思路是找到數據結構中的最小值并將其放置在第一位,接著找到第二小的值并將其放在第二位。

// 選擇 - 找到最小的, 放在第一位; 找到第二小的, 擋在第二位 for (let i = 0; i < arr.length; i++) {let min_index = i;for (let j = i; j < arr.length; j++) {if (arr[min_index] > arr[j]) {min_index = j}}if (i !== min_index) {[arr[i], arr[min_index]] = [arr[min_index], arr[i]]} } console.log(arr)

?

?

3. 插入排序

// 插入 - 找到合適的位置, 把它插進去 for (let i = 0; i < arr.length; i++) {let j = i;let tmp = arr[i]while (j > 0 && arr[j - 1] > tmp) {arr[j] = arr[j - 1];j--;}arr[j] = tmp; } console.log(arr)

?

4. 歸并排序

// 歸并 - 采用分治思想, 將原數組分成只有一個位置的小數組, 接著講小數組歸并成大數組 let mergeSortRec = function (arr) {let length = arr.length;if (length === 1) {return arr;}let mid = Math.floor(length / 2);let left_array = arr.slice(0, mid);let right_array = arr.slice(mid, length);return merge(mergeSortRec(left_array), mergeSortRec(right_array)); }let merge = function (left_array, right_array) {let result = [];let il = 0;let ir = 0;while (il < left_array.length && ir < right_array.length) {if (left_array[il] < right_array[ir]) {result.push(left_array[il++])} else {result.push(right_array[ir++])}}while (il < left_array.length) {result.push(left_array[il++])}while (ir < right_array.length) {result.push(right_array[ir++])}return result; } console.log(mergeSortRec(arr))

?

5. 快速排序

?

// 快排 - 采用分治思想, 劃分主元 let quick = function (arr, left_ptr, right_ptr) {let index;if (arr.length > 1) {// 劃分主元, 并執行交換index = partition(arr, left_ptr, right_ptr);if (left_ptr < index - 1) {quick(arr, left_ptr, index - 1);}if (index < right_ptr) {quick(arr, index, right_ptr);}} } let partition = function (array, left_ptr, right_ptr) {let pivot = array[Math.floor((left_ptr + right_ptr) / 2)];let i = left_ptr;let j = right_ptr;while (i <= j) {while (array[i] < pivot) {i++;}while (array[j] > pivot) {j--;}if (i <= j) {[aarrayrr[i], array[j]] = [array[j], array[i]];}i++;j--;}return i; }quick(arr, 0, arr.length - 1) console.log(arr)

?

轉載于:https://www.cnblogs.com/mykiya/p/11006708.html

總結

以上是生活随笔為你收集整理的JavaScript 几种排序算法实现(冒泡、选择、插入、归并、快速排序)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。