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]))

  • 相关阅读:
    element ui 时间控件 多个日期
    java 获取两个日期之间的所有日期(年月日)
    java 正则表达式(内附例子)
    Notepad++怎么使用正则替换
    基于 vue+element ui 的cdn网站(多页面,都是各种demo)
    使用github搭建个人html网站
    PL/SQL Developer 如何记住密码
    PL/SQL Developer图形化窗口创建数据库(表空间和用户)以及相关查询sql
    安装pl/sql developer(内附下载地址)
    vue中操作cookie的插件
  • 原文地址:https://www.cnblogs.com/Answer1215/p/6799983.html
Copyright © 2011-2022 走看看