python 快速排序-选择排序-冒泡排序-思想

本文详细介绍了三种常见的排序算法:冒泡排序、选择排序和快速排序。通过具体的Python代码实现,展示了每种算法的工作原理和步骤。冒泡排序通过重复遍历要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。选择排序则是在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。而快速排序是一种分治算法,选择一个‘枢轴’,将比它小的元素移到它的左边,比它大的移到右边,再递归地对左右子序列进行同样的操作。
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
'''=================================================
@Project -> File   : sort_test
@IDE    :PyCharm
@Author :zhangjun.xue
@Date   :2019-09-23 11:17
@Desc   :
=================================================='''


def bubbling_sort(data):
    """
    冒泡排序
    从前往后,依次比较相邻的两个数,把较大的数放到后面。
    一次循环,可以在当前最末尾位置得到一个当前最大值。
    :param data:
    :return:
    """
    for i in range(len(data)):
        for j in range(len(data) - 1):
            if li[i] < li[j]:
                li[i], li[j] = li[j], li[i]
    return data


def check_sort(data):
    """
    选择排序
    从数组中找到最小的元素,和第一个位置的元素互换。
    从第二个位置开始,找到最小的元素,和第二个位置的元素互换。
     ........
    直到选出array.length-1个较小元素,剩下的最大的元素自动排在最后一位。
    :param data:
    :return:
    """
    for i in range(len(data)):
        for j in range(i+1, len(data)):
            if data[i] > data[j]:
                data[i], data[j] = data[j], data[i]
    return data


def quick_sort(b):
    """
    快速排序
    :param b:
    :return:
    """
    if len(b) < 2:
        return b
    # 选取基准,随便选哪个都可以,选中间的便于理解
    mid = b[len(b) // 2]
    # 定义基准值左右两个数列
    left, right = [], []
    # 从原始数组中移除基准值
    b.remove(mid)
    for item in b:
        # 大于基准值放右边
        if item >= mid:
            right.append(item)
        else:
            # 小于基准值放左边
            left.append(item)
    # 使用迭代进行比较
    return quick_sort(left) + [mid] + quick_sort(right)


if __name__ == "__main__":
    print '--- start ---'
    li = [6, 5, 3, 2, 4, 1]
    print 'bubbling_sort = ', bubbling_sort(li)
    print 'check_sort = ', check_sort(li)
    print 'quick_sort = ', quick_sort(li)

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值