【排序算法的JavaScript实现】

本文详细介绍了五种经典的排序算法:冒泡排序、插入排序、选择排序、归并排序及快速排序。每种算法均附有简洁易懂的代码实现,并通过实际案例展示了其工作原理与应用场景。

冒泡排序

  1. let compare = (n1, n2) => n1 - n2;
  • let bubbleSort = (arr, cmp = compare) => {
  •   for (let i = 0; i < arr.length; i++) {
  •     for (let j = i; j > 0; j--) {
  •       if (cmp(arr[j], arr[j - 1]) < 0) {
  •         [arr[j], arr[j - 1]] = [arr[j - 1], arr[j]];
  •       }
  •     }
  •   }
  •   return arr;
  • };


插入排序

  1. let insertionSort = (arr) => {
  •     for (let i = 0; i < a.length; i++) {
  •         let toCmp = arr[i];
  •         for (let j = i; j > 0 && toCmp < a[j - 1]; j--)
  •             arr[j] = a[j - 1];
  •         arr[j] = toCmp;
  •     }
  •     return arr;
  • }


选择排序

  1. var selectionSort = function (arr) {
  •   let i,m,j;
  •   for (i = -1; ++i < a.length;) {
  •     for (m = j = i; ++j < a.length;) {
  •       if (arr[m] > arr[j]) m = j;
  •     }
  •     [arr[m], arr[i]] = [arr[i], arr[m]];
  • }
  • return arr;
  • }


归并排序

  1. let mergeSort = (arr) => {
  •   if (arr.length < 2) return arr;
  •   let middle = parseInt(arr.length / 2),
  •   left = arr.slice(0, middle),
  •   right = arr.slice(middle);
  •   return merge(mergeSort(left), mergeSort(right));
  • }
  • let merge = (left, right) => {
  •   let result = [];
  •   while (left.length && right.length) {
  •     left[0] <= right[0] ?
  •     result.push(left.shift()) :
  •     result.push(right.shift());
  •   }
  •   while (left.length) result.push(left.shift());
  •   while (right.length) result.push(right.shift());
  •   return result;
  • }


快速排序

  1. let quicksort = function(arr) {
  •   if(arr.length <= 1) return arr;
  •   let pivot = Math.floor((arr.length -1)/2);
  •   let val = arr[pivot], less = [], more = [];
  •   arr.splice(pivot, 1);
  •   arr.forEach(function(e,i,a){
  •     e < val ? less.push(e) : more.push(e);
  •   });
  •   return (quicksort(less)).concat([val],quicksort(more))
  • }​​


更多java,java面试题,java学习  http://techfoxbbs.com


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值