快速排序

func sortArray(nums []int) []int {
    quickSort(nums, 0, len(nums)-1)
    return nums
}

// 快排,分治的思想,选一个中轴,
// 把小于中轴的元素放到左边,大于中轴的元素放到右边
// 然后递归处理中轴两边的元素

func quickSort(nums []int, left, right int) {
    if left >= right {
        return 
    }

    i := left
    j := right
    key := nums[left] // 选左边第一个为中轴
    for i < j {
        // 先从右边扫描,找到小于中轴的元素
        for i < j && nums[j] >=key {
            j--
        }
        if i < j {
            nums[i] = nums[j]
        }
        // 再从左边扫,找到大于中轴的元素
        for i < j && nums[i] <= key {
            i++
        }
        if i < j {
            nums[j] = nums[i]
        }
    }
    nums[i] = key // 把中轴元素放在中间
    quickSort(nums, left, i-1)
    quickSort(nums, i+1, right)
}


posted @ 2024-06-07 16:06  gdut17_2  阅读(11)  评论(0)    收藏  举报