LinkCode 整数排序II

本文详细介绍了快速排序算法的基本思想及其实现过程。通过具体步骤解释了如何选取基准值,并通过左右指针交换元素来完成分区操作,最终递归地对各分区进行排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://www.lintcode.com/zh-cn/problem/sort-integers-ii/

题目

给一组整数,按照升序排序。使用归并排序,快速排序,堆排序或者任何其他 O(n log n) 的排序算法。

样例

给出 [3, 2, 1, 4, 5], 排序后的结果为 [1, 2, 3, 4, 5]

 

快速排序思路

每次拿第一个值开始从左到右进行比较,如果比第一个值小,中值得指针加1,与此同时如果中值指针不等于当前循环指针的话进行交换,保持比第一个值小的数是连续的,循环结束后将第一个值与中值指针的值交换,完成中值指针的值比左边的数都大,比右边的书都小,递归中值指针左右两边,直到左右指针相等完成排序。

 

实现代码

class Solution:
    # @param {int[]} A an integer array
    # @return nothing
    def sortIntegers2(self, A):
        # Write your code here
        self.quickSort(A, 0,len(A))
        
    def quickSort(self, array, start, end):
        if start < end: #边界条件
        
            # 不断获取中值指针,不断左右递归直到边界条件
            parindex = self.partition(array, start, end)
            self.quickSort(array, start, parindex)
            self.quickSort(array, parindex + 1, end)
        
    def partition(self, array, start, end):
        index = start   # 中值指针
        num = array[start]  # 初始比较值为第一个元素
        for i in xrange(start+1, end):
            if array[i] < num:  # 如果小于则中值指针 +1
                index += 1
                if index != i:   
                    # 如果中值指针不等于循环指针,则代表其中间有比第一个元素大的值,所以要把这个比较小的值换过去
                    # 使得比第一个元素小的值始终是连续的
                    array[index], array[i] = array[i], array[index]
        # 当循环结束后,第二个元素到中值指针所在元素这一区间内所有的值都比第一个元素小
        # 所以将第一个元素跟指针元素交换,完成排序
        array[start], array[index] = array[index], array[start]
        return index

  

 

转载于:https://www.cnblogs.com/LiCheng-/p/6623152.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值