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

  • 相关阅读:
    ABP
    妖道角
    检测空值,以及会不会出现mapping类型不一致的问题
    wcf服务契约代理链
    wcf服务契约继承
    win64+anaconda+xgboost(转)
    python中迭代问题
    ROC曲线和AUC值(转)
    python中split()和split(' ')的区别
    str和repr的区别(转)
  • 原文地址:https://www.cnblogs.com/ygjzs/p/12235886.html
Copyright © 2011-2022 走看看