排序算法(冒泡排序、选择排序、快速排序)

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

一、 冒泡排序

1. 算法思想

冒泡排序就是从左往右或者从右往左,方向不确定,相互比较,比较的大小也不确定。拿升序排序来说,从左往右相邻两个元素相互比较,如果左边的元素比右边的元素大,则交换两元素,否则则不交换。

2.代码实现

for k in range(100):
   li = [random.randrange(i * 10) for i in range(1, 10)]
   for i in range(len(li)):
       for j in range(len(li) - i - 1):
           if (li[j] > li[j + 1]):
               li[j], li[j + 1] = li[j + 1], li[j]
   print(li)

3. 运行结果

在这里插入图片描述

二、选择排序

1. 算法思想

每次从序列中选择一个最值,然后置于序列待排部分的第一个或者最后一个位置。拿升序来说,可以从左往右遍历待排序列,然后记录最大值的下标,遍历到待排序列的末尾,然后交换待排序列末尾元素和最值元素的位置,依此类推。

2. 代码实现

for k in range(100):
   li = [random.randrange(i * 10) for i in range(1, 10)]
   for i in range(len(li)):
       index=0
       for j in range(len(li)-i):
           if(li[j]>li[index]):
               index=j
           li[len(li)-i-1],li[index]=li[index],li[len(li)-i-1]
   print(li)

3. 运行结果

在这里插入图片描述

三、快速排序

1.算法思想

快速排序的核心思想也是分治法,分而治之。它的实现方式是每次从序列中选出一个基准值,其他数依次和基准值做比较,比基准值大的放右边,比基准值小的放左边,然后再对左边和右边的两组数分别选出一个基准值,进行同样的比较移动,重复步骤,直到最后都变成单个元素,整个数组就成了有序的序列。

2.代码实现

# 快速排序
# 实现快速排序
def partion(start, end):
    while start < end:
        while start < end and li[end] > li[start]:
            end -= 1
        if (start < end):
            li[end], li[start] = li[start], li[end]
            start += 1
        while start < end and li[end] > li[start]:
            start += 1
        if (start < end):
            li[start], li[end] = li[end], li[start]
            end -= 1
    return start


# 递归调用快速排序
def quickSort(start, end):
    if start < end:
        mid = partion(start, end)
        quickSort(start, mid - 1)
        quickSort(mid + 1, end)


for k in range(10):
    li = [random.randrange(i * 10) for i in range(1, 10)]
    print("排序前:", li)
    start, end = 0, len(li) - 1
    quickSort(start, end)
    print("排序后:", li)

3.运行结果

在这里插入图片描述


总结

本文只左简单介绍了三种最常用的简单排序算法的基本思想和Python实现方式,更多排序算法可以参考博文十大排序算法

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值