快速排序、归并排序

2020-12-25  本文已影响0人  Adder

快速排序

var testArr = [12, 72, 34, 5, 43, 24, 67, 8, 79, 55, 33, 24, 3]
 let quicksort = arr => {
   if (arr.length < 2) {
     return arr;
   }
   let arrowIndex = Math.floor(arr.length / 2);
   let arrow = arr.splice(arrowIndex, 1)[0];
   let right = [],
     left = [];
   for (let i = 0; i < arr.length; i++) {
     if (arr[i] < arrow) {
       left.push(arr[i])
     } else {
       right.push(arr[i])
     }
   }
   return quicksort(right).concat(arrow, quicksort(left));
 }

 console.log(quicksort(testArr))

归并排序

体育委员的左右手指向排序,给排好序的两个数组合并merge

 let merge = (a, b) => {
   if (a.length === 0) {
     return b
   } else if (b.length === 0) {
     return a
   } else if (a[0] < b[0]) {
     return [a[0]].concat(merge(a.slice(1), b))
   } else return [b[0]].concat(merge(a, b.slice(1)))
 }

 
 let mergeSort = arr => {
   let arrL = arr.length;
   if (arrL === 1) {
     return arr;
   }
   const left = arr.slice(0, Math.floor(arrL / 2));
   const right = arr.slice(Math.floor(arrL / 2));
   return merge(mergeSort(left), mergeSort(right))

 }

 console.log('==',mergeSort(testArr), '-----')
上一篇 下一篇

猜你喜欢

热点阅读