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 协议》,转载必须注明作者和本文链接
用过哪些工具?为啥用这个工具(速度快,支持高并发...)?底层如何实现的?
讨论数量: 2

实现快速排序 if s[head+1] > s[head] //标尺元素遇到小于它的,就换位置,标尺右移动一位。 这个写反了 应该是 if s[head] > s[head+1]

2年前 评论
Runtoweb3 (楼主) 2年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!