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

歡迎訪問 生活随笔!

生活随笔

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

javascript

JS六种排序算法

發布時間:2025/3/19 javascript 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JS六种排序算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

// 冒泡排序
// 循環的最大值從length遞減
// 基本就是每次循環只能排好最后一個 然后遞減到第一個

function bubbleSort(){ var changedData = new Array(); var index = 0;console.log("冒泡調用");for (var j = a.length; j >0 ; j--) {for (var i = 0; i < j; i++) {if(a[i]>a[i+1]){var z = 0;z = a[i+1];a[i+1] = a[i];a[i] = z;}changedData[index] = a.toString();index++;}//one }//twoshowDateChange(changedData); }

// 選擇排序
// 外循環 j選取當前元素 到length-1
// 內循環 j+1開始 到length 逐個比較出最小值min
// 交換 min 和 a[j]

function selectionSort(){ var changedData = new Array(); var index = 0;console.log("選擇調用");for (var j = 0; j < a.length-1; j++) {var min = a[j];var minIndex = j;for (var i = j+1; i < a.length; i++) {if(a[i] < min) {min = a[i];minIndex = i;}}//onea[minIndex] = a[j];a[j] = min;// changedData[index] = a.toString();index++;}//twoshowDateChange(changedData); }

// 插入排序
// 從下標1開始 往后選擇直到最后
// 每個選中的和他前面的所有比較
// 直到找到比他小的 排在他后面
// 相當于從1開始 每次都排好之前的i+1個 直到length
// 和冒泡相反

function insertionSort(){ var changedData = new Array(); var index = 0;console.log("插入排序");for (var j = 1; j < a.length; j++) {var now = a[j];var i = j - 1;while(i>=0 && now<a[i]){// 向后移數組a[i+1] = a[i];i--;}//onea[i+1] = now;changedData[index] = a.toString();index++;}//twoshowDateChange(changedData); }

// 希爾排序
// 間隔改變的插入排序
// 傳統插入排序 比較前面的相鄰對象
// 希爾排序比較前面的第h個對象 直到h間隔不存在更改
// 改變h 直到 h=1

function shellSort(){ var changedData = new Array(); var index = 0;console.log("希爾排序");var N = a.length;var h = 1;if (h < N/3) {h = h*3 + 1;//設置間隔}while(h > 0){for (var j = h; j < a.length; j++) {for (var i = j;i >= h && a[i] < a[i-h]; i -= h) {var z;z = a[i];a[i] = a[i-h];a[i-h] = z;// changedData[index] = a.toString();index++;}}h = (h-1)/3;//改變間隔}showDateChange(changedData); }

// 歸并排序
// 數據分為 step為間隔的小數組
// 將小數組排序 step變大 直到為1/2個數組
// 將前后兩個已排序的數組 再排序

function mergeSort(arr){ var changedData = new Array();console.log("歸并排序");if (arr.length < 2) {return;}var step = 1;var left;var right;while(step < arr.length){left = 0;right = step;while(right + step <= arr.length){mergeArrays(arr,left,left+step,right,right+step);left = right + step;right = left + step;}if (right < arr.length) {mergeArrays(arr,left,left+step,right,arr.length);}step *= 2;}function mergeArrays(arr,startLeft,stopLeft,startRight,stopRight){var leftArray = new Array(stopLeft - startLeft +1);var rightArray = new Array(stopRight - startRight +1);k = startRight;for (var i = 0; i < rightArray.length-1; i++) {rightArray[i] = arr[k];k++;}k = startLeft;for (var i = 0; i < leftArray.length-1; i++) {leftArray[i] = arr[k];k++;}rightArray[rightArray.length-1] = Infinity;leftArray[leftArray.length-1] = Infinity;var m = 0;var n = 0;for (var k = startLeft; k < stopRight; k++) {if (leftArray[m] <= rightArray[n]) {arr[k] = leftArray[m];m++;}else{arr[k] = rightArray[n];n++; }}arr += "";//轉化為字符串changedData.push(arr);}showDateChange(changedData); }

// 快速排序
// 沒實現可視化排序

function quickSort(){console.log("快速排序");function qSort(list){if (list.length == 0) {return list;}// 選取基數var pivotIndex = Math.floor(list.length/2);var pivot = list.splice(pivotIndex,1)[0];var left = [];var right = [];for (var i = 0; i < list.length; i++) {if (list[i] > pivot) {right.push(list[i]);}else{left.push(list[i]);}}// 遞歸 更換基數 并且排序其左右return qSort(left).concat([pivot],qSort(right));}a = qSort(a);showDate(); }

總結

以上是生活随笔為你收集整理的JS六种排序算法的全部內容,希望文章能夠幫你解決所遇到的問題。

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