GO 实现快速排序
快速排序是原地排序,就是在s数组中不断交换位置。
也是分治思想,选中一个标尺,比如第一个元素。然后把其他元素依次和他比较,把小于它的元素放左边,大于它的元素放右边
递归处理左边部分,右边部分
func main() {
s := []int{6,3,2,62,4,51}
qSort(s)
fmt.Println(s)
}
func qSort(s []int){
len := len(s)
if len < 2 {
return
}
head,trip := 0, len-1
value := s[head]
for head < trip { //s[head]就是我们的标尺,
if s[head+1] > value { //标尺元素遇到大于它的,就把这个元素丢到最右边trip
s[head+1],s[trip] = s[trip],s[head+1]
trip--
}else if s[head+1] < s[head]{ //标尺元素遇到小于它的,就换位置,标尺右移动一位。
s[head],s[head+1] = s[head+1],s[head]
head++
}else{ //相等不用交换
head++
}
}
//进过上面的处理,保证了标尺左边的元素都小于等于标尺元素(s[head]),右边的元素大于等于标尺元素。
qSort(s[:head])
qSort(s[head+1:])
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: