zoukankan      html  css  js  c++  java
  • 链表实现快速排序

    javascript中实现一个链表的快速排序

    class Node {
      constructor (value) {
        this.val = value
        this.next = undefined
      }
    }
    
    class NodeList {
      constructor (arr) {
        let head = new Node(arr.shift())
        let next = head
        arr.forEach(item => {
          next.next = new Node(item)
          next = next.next
        })
        return head
      }
    }
    
    let swap = (p, q) => {
      let val = p.val
      p.val = q.val
      q.val = val
    }
    
    let partion = (begin, end) => {
      let val = begin.val
      let p = begin
      let q = begin.next
      while (q !== end) {
        if (q.val < val) {
          p = p.next
          swap(p, q)
        }
        q = q.next
      }
      // 让基准元素跑到中间去
      swap(p, begin)
      return p
    }
    
    export default function sort (begin, end) {
      if (begin !== end) {
        let part = partion(begin, end)
        sort(begin, part)
        sort(part.next, end)
      }
    }
    
    export {
      Node,
      NodeList
    }
    
    
    

    测试文件

    import sort, {
      NodeList
    } from '../../code/chain/lesson1'
    
    test('sort:1', () => {
      let head = new NodeList([4, 1, 3, 2, 7, 9, 10, 12, 6])
      sort(head)
      let res = []
      let next = head
      while (next) {
        res.push(next.val)
        next = next.next
      }
      expect(res).toEqual([1, 2, 3, 4, 6, 7, 9, 10, 12])
    })
    
    

  • 相关阅读:
    资源汇总
    最近面试经历
    Screen Space Ambient Occlusion
    实时渲染下的多线程协作:实践
    High Dynamic Range
    Deferred Shading
    实时渲染下的多线程协作
    9.了解四个相等判断的用法
    14.使用构造函数链
    16.垃圾最小化
  • 原文地址:https://www.cnblogs.com/ygjzs/p/12235886.html
Copyright © 2011-2022 走看看