国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > JS > 正文

常用的 JS 排序算法 整理版

2024-05-06 16:43:35
字體:
來源:轉載
供稿:網友

1.冒泡排序

var bubbleSort = function(arr) {  for (var i = 0, len = arr.length; i < len - 1; i++) {    for (var j = i + 1; j < len; j++) {      if (arr[i] > arr[j]) {        var temp = arr[i];        arr[i] = arr[j];        arr[j] = temp;      }    }  }  return arr;};

2.選擇排序

var selectSort = function(arr) {  var min;  for (var i = 0; i < arr.length - 1; i++) {    min = i;    for (var j = i + 1; j < arr.length; j++) {      if (arr[min] > arr[j]) {        min = j;      }    }    if (i != min) {      swap(arr, i, min);    }    console.log(i + 1, ": " + arr);  }  return arr;};function swap(arr, index1, index2) {  var temp = arr[index1];  arr[index1] = arr[index2];  arr[index2] = temp;};

3.插入排序

var insertSort = function(arr) {  var len = arr.length,    key;  for (var i = 1; i < len; i++) {    var j = i;    key = arr[j];    while (--j > -1) {      if (arr[j] > key) {        arr[j + 1] = arr[j];      } else {        break;      }    }    arr[j + 1] = key;  }  return arr;};

4.希爾排序

function shellSort(arr) {  if (arr.length < 2) {    return arr;  };  var n = arr.length;  for (gap = Math.floor(n / 2); gap > 0; gap = Math.floor(gap /= 2)) {    for (i = gap; i < n; ++i) {      for (j = i - gap; j >= 0 && arr[j + gap] < arr[j]; j -= gap) {        temp = arr[j];        arr[j] = arr[j + gap];        arr[j + gap] = temp;      }    }  }  return arr;};

5.歸并排序

function merge(left, right) {  var result = [];  while (left.length > 0 && right.length > 0) {    if (left[0] < right[0]) {      // shift()方法用于把數組的第一個元素從其中刪除,并返回第一個元素的值      result.push(left.shift());    } else {      result.push(right.shift());    }  }  return result.concat(left).concat(right);}function mergeSort(arr) {  if (arr.length == 1) {    return arr;  }  var middle = Math.floor(arr.length / 2),    left = arr.slice(0, middle),    right = arr.slice(middle);  return merge(mergeSort(left), mergeSort(right));}

6.快速排序

var quickSort = function(arr) {    if (arr.length <= 1) {    return arr;  }  var pivotIndex = Math.floor(arr.length / 2);   var pivot = arr.splice(pivotIndex, 1)[0];  var left = [];  var right = [];    for (var i = 0; i < arr.length; i++) {       if (arr[i] < pivot) {            left.push(arr[i]);        } else {            right.push(arr[i]);        }   }    return quickSort(left).concat([pivot], quickSort(right));}; 

算法效率比較

---------------------------------------------------------------
| 排序算法 | 平均情況         | 最好情況   | 最壞情況   | 穩定性 |
---------------------------------------------------------------
| 冒泡排序 |  O(n²)          |  O(n)     |  O(n²)    | 穩定   |
---------------------------------------------------------------
| 選擇排序 |  O(n²)          |  O(n²)    |  O(n²)    | 不穩定 |
---------------------------------------------------------------
| 插入排序 |  O(n²)          |  O(n)     |  O(n²)    | 穩定   |
---------------------------------------------------------------
| 希爾排序 |  O(nlogn)~O(n²) |  O(n^1.5) |  O(n²)    | 不穩定 |
---------------------------------------------------------------
| 歸并排序 |  O(nlogn)       |  O(nlogn) |  O(nlogn) | 穩定   |
---------------------------------------------------------------
| 快速排序 |  O(nlogn)       |  O(nlogn) |  O(n²)    | 不穩定 |
---------------------------------------------------------------


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 柏乡县| 铅山县| 龙游县| 丰顺县| 揭阳市| 阿坝| 岫岩| 青阳县| 开鲁县| 微博| 沧源| 靖江市| 怀集县| 和硕县| 孝昌县| 株洲县| 静海县| 安陆市| 河源市| 嵊泗县| 茂名市| 庆元县| 那曲县| 临江市| 阳春市| 贵阳市| 疏勒县| 彩票| 岐山县| 梅河口市| 云霄县| 榆中县| 九寨沟县| 深水埗区| 东明县| 淮安市| 武定县| 舒兰市| 栾川县| 高淳县| 九江市|