go 单线程/多线程快速排序
2020-07-24 13:56
681 查看
第一,单线程实现快速排序
package main import ( "fmt" ) func main(){ array := []int{3, 6, 1, 4, 2, 8} fmt.Println(array) quickSort(array, 0, len(array)-1) fmt.Println(array) } func quickSort(array []int, left, right int) { if left >= right { return } index := partition(array,left,right) quickSort(array, left, index - 1) quickSort(array, index + 1, right) } func partition(array []int, left, right int) int { baseNum := array[left] for left < right{ for (array[right] >= baseNum && right > left){ right-- } array[left] = array[right] for (array[left] <=baseNum && right > left) { left++ } array[right] = array[left] } array[right] = baseNum return right }
第二,多线程实现快速排序
package main import ( "fmt" ) func main() { array := []int{3, 1, 4, 1, 5, 9, 2, 6} ch := make(chan int) go quickSort(array, ch) for value := range ch { fmt.Println(value) } } func quickSort(array []int, ch chan int) { if len(array) == 1 { ch <- array[0] close(ch) return } if len(array) == 0 { close(ch) return } small := make([]int, 0) big := make([]int, 0) left := array[0] array = array[1:] for _, num := range array { switch { case num <= left : small = append(small, num) case num > left : big = append(big, num) } } left_ch := make(chan int, len(small)) right_ch := make(chan int, len(big)) go quickSort(small, left_ch) go quickSort(big, right_ch) //合并数据 for i := range left_ch { ch <- i } ch<-left for i := range right_ch { ch <- i } close(ch) return }
相关文章推荐
- Go使现快速排序
- go语言快速排序Quick sort
- go示例1:文件读写和排序(快速 冒泡)
- 算法代码实现之三向切分快速排序,Golang(Go语言)实现
- Go语言对数组进行冒泡排序和快速排序
- Go语言冒泡、选择、插入、快速排序实战浅析
- go 快速排序
- Java/Go实现——快速排序
- 快速排序 go 语言实现
- 算法代码实现之快速排序,Golang(Go语言)实现
- 如何使用shell脚本快速排序和去重文件数据
- 算法导论之三:快速排序
- 快速排序
- 快速排序
- 快速排序QuickSort
- 快速排序和二分查找时间复杂度详解
- 快速排序和二分查找算法的实现C语言
- 归并排序和快速排序【二分法】【资料来自网络】
- 快速排序的两种实现方法
- Java实现快速排序递归和非递归