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

    go实现快速排序

    package main
    
    import (
    	"log"
    )
    
    var c = 0
    
    func main() {
    
    	var aa []int = []int{5, 2, 3, 11, 13, 27, 1, 38, 0, 6, 4, 7, 9, 15, 33, 30}
    	log.Println(aa)
    	qs(aa)
    	log.Println(aa)
    	// log.Println("quick sort result: ", quickSort(aa))
    
    }
    /*
    func quickSort(s []int) []int {
    	if len(s) < 2 {
    		return s
    	}
    
    	v := s[0]
    	var left, right []int
    	for _, e := range s[1:] {
    		if e <= v {
    			left = append(left, e)
    		} else {
    			right = append(right, e)
    		}
    	}
    
    	// 实现了“quickSort(left) + v + quickSort(right)”的操作
    	return append(append(quickSort(left), v), quickSort(right)...)
    }
    */
    
    func qs(a []int) {
    	c++
    	log.Println("agin", a)
    	flag := a[0]
    	l := 0
    	r := len(a) - 1
    	bb := false
    	for l <= r {
    
    		if bb == true {
    			if a[l] > flag {
    				a[r] = a[l]
    				bb = false
    				r--
    			} else {
    				l++
    			}
    
    		} else {
    			if a[r] < flag {
    				a[l] = a[r]
    				bb = true
    				l++
    			} else {
    				r--
    			}
    
    		}
    		if l == r {
    
    			a[l] = flag
    			log.Println("swap", a)
    			// 先序遍历
    			if l >= 2 {
    				log.Println("in1", c, l, a)
    				qs(a[0:l])
    			}
    			if len(a)-l >= 3 {
    				log.Println("in2", c, l, a)
    				qs(a[l+1 : len(a)])
    			}
    		}
    
    	}
    
    }
    

      中间注释的是参考别人实现的,可以对比分析一下

  • 相关阅读:
    Reference Counting GC (Part two :Partial Mark & Sweep)
    Reference Counting GC (Part one)
    Union File System
    Linux Cgroups
    Mark Sweep GC
    取模运算
    负数取模怎么算
    牛客【2021寒假集训营第一场】J-一群小青蛙呱蹦呱蹦呱
    记codeforces一个简单模拟题
    筛法求素数
  • 原文地址:https://www.cnblogs.com/oxspirt/p/12598648.html
Copyright © 2011-2022 走看看