ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

快速排序

2022-05-26 01:31:07  阅读:157  来源: 互联网

标签:sort tmp 基准值 nums 排序 快速 指针


快速排序的思想就是分治

 

具体递归过程是:

1、用一个sort排序函数,讲数划为2部分。具体为找到一个基准数(我选第一个数字),让其左边元素小于其,右边元素大于其;

2、将左边放入这个sort排序函数中

3、将右边放入这个sort排序函数中

4、直到放入的是一个元素,说明不用排序了,递归就结束了。

 

将基准数放置中间的过程:

1、找一个基准数(我选左边第一个数字,注意!!如果这里选左边第一个数字,那么下面就得从右边开始比较

2、两个左右指针,指向左右两端

3、循环判断,右指针的数据如果大于基准值,说明这个数字不用动,直接处理下一个,指针左移

4、直到上一步循环停止,此时把左、右下标元素互换(这里1是为了每次对比的时候,都是用非基准值来对比,而不是用基准值本身,2是上一个循环结束就意味着这个数字肯定小,需要走后面的处理)

5、循环判断,左指针的数据如果小于等于(注意!!这里和上面必须有一个地方得有等于,否则如果待排序数字中有一个和基准值一样的值,程序就走不下去了)基准值,说明这个数字不用动,直接处理下一个,指针右移

6、直到上一步循环停止,此时把左、右下标元素互换(这里同理)

7、循环停止条件就是两个指针重合

 

过程:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

代码:

# -*- coding: utf-8 -*-
nums = [19, 97, 9, 17, 1, 8]

class solution(object):
    def sort(self, nums, begin, end):
        # 结束
        if len(nums) <= 1 or begin >= end:
            return 

        # 中轴数据
        mid = nums[begin]

        i = begin
        j = endwhile i != j:
            # 一定要从右边开始递减
            while nums[j] > mid and j>i:
                j = j - 1
            
            # 交换,这里一定要做,这样可以确保,每次挪动的都不是中轴数
            tmp = nums[j] nums[j] = nums[i] nums[i] = tmp# 注意,两个while中一定得有一个有 = 不然有和中轴数一样的case走不下去
            while nums[i] <= mid and j>i:
                i = i + 1

            # 同理,一定要交换
            tmp = nums[j] nums[j] = nums[i] nums[i] = tmp
self.sort(nums, begin, i-1) self.sort(nums, i+1, end) s = solution() s.sort(nums, 0, len(nums)-1) print nums

 

标签:sort,tmp,基准值,nums,排序,快速,指针
来源: https://www.cnblogs.com/by-dream/p/16311623.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有