go fast sorting

go fast sorting

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

	} 

}

  Among others comment is a reference implementation, you can look at comparative analysis

Guess you like

Origin www.cnblogs.com/oxspirt/p/12598648.html