python排序算法

排序

一、排序算法

  • 排序是计算机内经常进行的一个操作,其目的是将一组“无序”的序列调整为有序的序列。

    程序:数据结构+算法

  • 常见八大排序算法

    冒泡排序、选择排序、插入排序、归并排序、快速排序、堆排序、基数排序、Shell排序.

二、冒泡排序

  • 冒泡排序是一种简单的基本的排序算法。

  • 算法原理: [9,8,7,5,6,4,3,2,1]

    • 比较相邻的两个元素,如果第一个比第二个大,则交换它们两个
    • 对每一对相邻的元素要做相同的工作,从开始的第一对直到最后一对,最后的元素就会是最大的数
    • 针对所有的元素重复以上的步骤,除了最后一个

    依次比较相邻的两个数,将小数放前面,大数放后面

import random

a = []
for i in range(10):
    a.append(random.randint(0, 100))
print('排序前:', a)

# 从小到大
for i in range(len(a)-1):
    for j in range(len(a) - 1 - i):
        if a[j] > a[j + 1]:
            a[j], a[j + 1] = a[j + 1], a[j]

print('排序后:', a)


# 从大到小
for i in range(len(a)-1):
    for j in range(len(a) - 1 - i):
        if a[j] < a[j + 1]:
            a[j], a[j + 1] = a[j + 1], a[j]

print('排序后:', a)

三、选择排序

  • 原理:每一趟从待排序的序列中选出最大或最小的一个元素,顺序放在已排好序的最后。
  • [49, 38, 65, 97, 76, 13, 27, 49]
  • [49, 38, 65, 97, 76, 13, 27, 49] - > [13, 38, 65, 97, 76,49, 27, 49]-> [13, 27, 65, 97, 76,49, 38, 49]
import random

a = []
for i in range(10):
    a.append(random.randint(0, 100))
print('排序前:', a)


for i in range(len(a)):
    # 找一个最小值的下标
    min = i
    for j in range(i+1,len(a)):
        if a[min] > a[j]:
            min = j
    a[min], a[i] = a[i], a[min]

print('排序后:',a)

# 1. 思想   2. 转代码

四、插入排序

  • 思想:现在已经有一个有序的序列了,要求在这个已经的数据序列中,再插入一个数
  • 插入排序是将序列分为两部分,最开始的时候第一个数就是一个有序部分,剩下的部分为无序部分,每次取无序部分中的第一个数和无序部分进行比较,放入到有序部分中的合适的位置
  • [65,27,59,64,58]
    • [65] [27,59,64,58]
    • [65] [27,59,64,58] -> [27,65] [59,64,58] -> [27,65] [64,58]
import random

a = []
for i in range(10):
    a.append(random.randint(0, 100))
print('排序前:', a)

# 取无序部分的第一个元素,和有序部分进行比较,放在合适的位置
# [65,27,59,64,58]
# [20,27,59,65,65,,20]
for i in range(len(a) - 1):
    for j in range(i + 1, 0, -1):
        if a[j] < a[j - 1]:
            a[j], a[j - 1] = a[j - 1], a[j]
        else:
            break

print('排序后:', a)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值