zoukankan      html  css  js  c++  java
  • [Algorithms] Quicksort algorithm using TypeScript

    Quicksort (also called partition sort and pivot sort) is arguably the most used sorting algorithm. It is the one commonly implemented internally in language runtimes. In this lesson we cover the quick sort algorithm, why is it called quick and how to implement it using TypeScript / JavaScript.

    export function quickSort(array) {
      array = [...array];
      partition(array, 0, array.length);
      return array;
    }
    
    function partition(array, start, end) {
      const length = end - start;
      if (length <= 1) return;
    
      // select the pivot
      const pivotIndex = start + Math.floor(Math.random() * length);
      // move the pivot to the beginning of the array
      [array[start], array[pivotIndex]] = [array[pivotIndex], array[start]];
      // get the pivot value
      const pivot = array[start];
      // get the pivot index
      let pivotRank = start;
      // loop thought the array, swap every number each is smaller
      // than the pivor
      for (let index = start + 1; index < end; index++) {
        if (array[index] < pivot) {
          // increase the rank poisition first
          pivotRank++;
          // swap the current number and rand poisition
          [array[index], array[pivotRank]] = [array[pivotRank], array[index]];
        }
      }
      // move the pivot to the pivotRank position
      if (pivotRank !== start) {
        [array[start], array[pivotRank]] = [array[pivotRank], array[start]];
      }
    
      partition(array, start, pivotRank);
      partition(array, pivotRank + 1, end);
    }
    
    const test = [5, 1, 8, 7, 4, 3, 6, 9];
    const res = quickSort(test);
    
    document.write(res);

     Simpfily way:

    function quickSort (array) {
    
        if (array.length <= 1) {
            return array;
        }
    
        let pivotIndex = 0;
        let pivot = array[pivotIndex];
    
        let less = []
        let greater = []
    
        for (let i in array) {
            if (i != pivotIndex) {
                array[i] > pivot ? greater.push(array[i]): less.push(array[i]);
            }
        }
    
        return [
            ...quickSort(less),
            pivot,
            ...quickSort(greater)
        ]
    }
    
    console.log(quickSort([6, 5, 4, 3, 2, 1, 7,9, 8]))

  • 相关阅读:
    团队建设简介【转载朋友Astar】
    《简约至上 交互式设计四策略》读书总结笔记
    自我管理-性格修行
    产品经理必知的10个网页设计术语,看后瞬间高大上!
    产品经理的知识/能力结构框架(知识管理)
    javascript代码复用模式
    javascript设计模式-观察者模式
    javascript设计模式-享元模式
    javascript设计模式-装饰模式
    javascript设计模式-适配器模式
  • 原文地址:https://www.cnblogs.com/Answer1215/p/6799983.html
Copyright © 2011-2022 走看看