Python排序算法一【冒泡、快速、选择排序】

前言

谈到算法,最简单最基础的就是排序,把一个数组里面的元素进行从小到大(从大到小)排序。
排序算法有多种,最基础的是冒泡排序、快速排序、选择排序、插入排序、计数排序、归并排序,当然还有其他算法,如堆排序、希尔排序、基数排序等,这里先讲前三种排序算法。


原理

冒泡排序

一个数组中的相邻两数,进行大小比较,根据条件(比如较小数排在较大数前面),交换位置。
第一个数和第二数进行比较,第二个数和第三个数进行比较,如此循环往复。
递归算法,每一次都要从第一个数进行比较(即是前面几轮冒泡已经排出顺序,依然从头),有n个数,需要n-1冒泡。

if iList[i] >= iList[i+1]:
	iList[i],iList[i+1] = iList[i+1],iList[i]

快速排序

先选取一个数作为基部,比基部小的排在左边,比基部大的排在基部右边,递归该过程,直到数组元素都为基部,合并就得到正确顺序。

选择排序

以数列中的第一个数字为基数,遍历列中的其他数字,找到最小数值,然后交换这两个数字的位置。

代码实现

import random


def randomList(n):
    iList = []
    for i in range(n):
        iList.append(random.randrange(-100, 100))
    return iList


class Sort:
    def __init__(self, iList):
        self.iList = iList

    def result(self, name):
        if name == "bubbleSort":
            print("冒泡排序", self.bubbleSort(self.iList))
        if name == "quickSort":
            print("快速排序", self.quickSort(self.iList))
        if name == "selectionSort":
            print("选择排序",self.selectionSort(self.iList))

    def bubbleSort(self, iList):  # 冒泡排序
        if len(iList) <= 1:
            return iList
        for i in range(1, len(iList)):
            for j in range(0, len(iList) - i):
                if iList[j] >= iList[j + 1]:
                    iList[j], iList[j + 1] = iList[j + 1], iList[j]
        return iList

    def quickSort(self, iList):  # 快速排序
        left = []
        right = []
        if len(iList) <= 1:
            return iList
        for i in iList[1:]:
            if i <= iList[0]:
                left.append(i)
            else:
                right.append(i)
        return self.quickSort(left) + [iList[0]] + self.quickSort(right)

    def selectionSort(self, iList):  # 选择排序
        if len(iList) <= 1:
            return iList
        for i in range(0, len(iList) - 1):
            if iList[i] != min(iList[i:]):
                mindex = iList.index(min(iList[i:]))
                iList[i], iList[mindex] = iList[mindex], iList[i]
        return iList


if __name__ == "__main__":
    iList = randomList(10)
    print(" 排序前 ",iList)
    s = Sort(iList)
    s.result("quickSort")
    s.result("bubbleSort")
    s.result("selectionSort")


总结

冒泡排序时间复杂度:O(n^2)
选择排序时间复杂度:O(n^2),在Python中为O(n)
快速排序时间复杂度:O(n Log n)~O(n^2)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

额狮虎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值