js算法排序--快速堆排序

Posted 自学web网页前端

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js算法排序--快速堆排序相关的知识,希望对你有一定的参考价值。

快速排序

<script>
   function quickSort(arr, left, right) {
var len = arr.length,
           partitionIndex,
           left = typeof left != 'number' ? 0 : left,
           right = typeof right != 'number' ? len - 1 : right;
       if (left < right) {
partitionIndex = partition(arr, left, right);
           quickSort(arr, left, partitionIndex-1);
           quickSort(arr, partitionIndex+1, right);
       }
return arr;
   }
function partition(arr, left ,right) { //分区操作
       var pivot = left,                      //设定基准值(pivot)
           index = pivot + 1;
       for (var i = index; i <= right; i++) {
if (arr[i] < arr[pivot]) {
swap(arr, i, index);
               index++;
           }
}
swap(arr, pivot, index - 1);
       return index-1;
   }
function swap(arr, i, j) {
var temp = arr[i];
       arr[i] = arr[j];
       arr[j] = temp;
   }
console.log(quickSort([3,5,1,4,2,8,9]))
</script>

堆排序

<script>
   var len;  
   function buildMaxHeap(arr) { //建立大顶堆
       len = arr.length;
       for (var i = Math.floor(len/2); i &gt;= 0; i--) {
heapify(arr, i);
       }
}
function heapify(arr, i) { //堆调整
       var left = 2 * i + 1,
           right = 2 * i + 2,
           largest = i;
       if (left < len && arr[left] > arr[largest]) {
largest = left;
       }
if (right < len && arr[right] > arr[largest]) {
largest = right;
       }
if (largest != i) {
swap(arr, i, largest);
           heapify(arr, largest);
       }
}
function swap(arr, i, j) {
var temp = arr[i];
       arr[i] = arr[j];
       arr[j] = temp;
   }
function heapSort(arr) {
buildMaxHeap(arr);
       for (var i = arr.length-1; i > 0; i--) {
swap(arr, 0, i);
           len--;
           heapify(arr, 0);
       }
return arr;
   }
console.log(heapSort([3,5,2,6,7,1]))
</script>


以上是关于js算法排序--快速堆排序的主要内容,如果未能解决你的问题,请参考以下文章

js算法初窥02(排序算法02-归并快速以及堆排序)

Java排序算法 - 堆排序的代码

常见排序算法的实现(归并排序快速排序堆排序选择排序插入排序希尔排序)

算法练习--快速排序堆排序

九种经典排序算法详解(冒泡排序,插入排序,选择排序,快速排序,归并排序,堆排序,计数排序,桶排序,基数排序)

十大排序总结(js实现稳定性内外部排序区别时间空间复杂度冒泡快速直接选择堆直接插入希尔桶基数归并计数排序)