Go使现快速排序

go使现快速排序

package main
/*
Go实现快速排序算法
思路:
在数组中取出一个元素作为基准值,把其它元素分为两组:
“大的”是那些大于基准值的元素,“小的”是那些小于基准值的元素,
递归对这两组做排序。
快排快速的原因:
一旦知道了某个元素比基准值小,它就不需要与那些大的元素比较。
而大的元素也不需要与小的元素比较。

原理解析:
http://blog.csdn.net/yzllz001/article/details/50982841
 */

import (
	"fmt"
)

// 交换数组中两个数的位置
func Swap(array []int, i int, j int) {
	var tmp = array[i]
	array[i] = array[j]
	array[j] = tmp
}

// 方法1, 这种写法看起来代码有点多
func QuickSort(array []int, left int, right int) {
	if left >= right {
		return
	}

	temp := array[left] //temp中存的就是基准数
	i := left
	j := right

	for ; i !=j; {
		for ; (array[j] >= temp && i<j); {
			j--
		}

		for ; (array[i] <= temp && i<j); {
			i++
		}

		if i < j {
			Swap(array, i, j)
		}
	}

	Swap(array, left, i) //最终将基准数归位
	QuickSort(array, left, i-1) //继续处理左边的,这里是一个递归的过程
	QuickSort(array, i+1, right) //继续处理右边的,这里是一个递归的过程
}

// 方法2, 比较简单,推荐
func QuickSort2(array []int, left int, right int) {
	if left > right {
		return
	}

	last := left
	for i:=left+1; i<=right; i++ {
		if array[i] < array[left] { // 从小到大排序
			last++
			array[i],arr[last] = array[last],arr[i]
		}
	}

	array[left], array[last] = array[last], array[left]
	QuickSort2(array, left, last-1) //继续处理左边的,这里是一个递归的过程
	QuickSort2(array, last+1, right) //继续处理右边的,这里是一个递归的过程
}

func main() {
	ary := []int{9,3,10,4,5,7,6,8,1,2}
	fmt.Printf("排序前为%v\n", ary)
	QuickSort2(ary, 0, 9)
	fmt.Printf("排序后为%v\n", ary)
}

输出:
排序前为[9 3 10 4 5 7 6 8 1 2]
排序后为[1 2 3 4 5 6 7 8 9 10]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值