算法go!

用 go 去实现一些算法,感觉会很有用(趣)。

排序算法

algorithm

冒泡

快排

条件

给定一个数组 [8,4,2,6,5,8,9,1] 需要从小到大排序

思路

快速排序的思路就是双管齐下,左右同时开始比较。 在左右两个标注相遇后,生成子比较任务,递归执行。

先上代码:

package main

import (
	"fmt"
)

func main() {
	var box []int
	box = []int{5,4,3,2,1}

	box = quickSort(box, 0, len(box)-1)
	fmt.Println("排序后:", box)
}

func quickSort(v []int, left, right int) []int {
	if left < right {
		flag := v[left]
		i, j := left, right

		for {
			for v[j] >= flag && i < j {
				j--
			}

			for v[i] <= flag && i < j {
				i++
			}

			if i >= j {
				break
			}

			v[i], v[j] = v[j], v[i]
		}

		v[left] = v[i]
		v[i] = flag

		quickSort(v, left, i-1)
		quickSort(v, i+1, right)
	}

	return v
}

我喜欢把上述过程归结为:

  1. 拿出一个比较标准
  2. 左边网右走起来
  3. 右边往左走起来
  4. 不满足标准位置了就换一换
  5. 再和标准换一换
  6. 重复1
Table of Contents