python快速排序代码_Python快速排序详解

今天给大家分享的是 Python 算法中的选择排序。选择排序是一种简单直观的排序算法。和之前讲到的冒泡排序、快速排序性质一样,都是属于比较法排序。

排序原理

它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

排序思路

选择排序是给每个位置选择当前元素最小的,比如给第一个位置选择最小的,在剩余元素里面给第二个元素选择第二小的,依次类推,直到第 n-1 个元素,第 n 个元素不用选择了,因为只剩下它一个最大的元素了。

为了便于理解,例子中的列表我只用了 4 个元素,利用双层 for 循环完成排序,内层 for 循环做判断和基准数字比较大小,比基准数字小的就交换位置,直到选择出最小的放在第一位,然后再从剩下的数字中继续判断,选择出第二小的,以此类推。(左右滑动查看全部代码)

Python

def selection_sort(list):

for i in range(0, len(list)-1):

min_ = i

for j in range(i + 1, len(list)):

if list[j] < list[min_]:

min_ = j

list[i], list[min_] = list[min_], list[i] # 双方交换位置

print(list)

list = [8, 4, 11, 6]

selection_sort(list)

1

2

3

4

5

6

7

8

9

10

11

12

defselection_sort(list):

foriinrange(0,len(list)-1):

min_=i

forjinrange(i+1,len(list)):

iflist[j]<list[min_]:

min_=j

list[i],list[min_]=list[min_],list[i]# 双方交换位置

print(list)

list=[8,4,11,6]

selection_sort(list)

代码分析

为了便于理解,我在代码中把每次内外层循环时的列表打印出来。(左右滑动查看全部代码)

Python

def selection_sort(list):

for i in range(0, len(list)-1):

min_ = i

print(list)

for j in range(i + 1, len(list)):

if list[j] < list[min_]:

min_ = j

list[i], list[min_] = list[min_], list[i] # swap

print(list)

print('\n')

list = [8, 4, 11, 6]

selection_sort(list)

1

2

3

4

5

6

7

8

9

10

11

12

13

14

defselection_sort(list):

foriinrange(0,len(list)-1):

min_=i

print(list)

forjinrange(i+1,len(list)):

iflist[j]<list[min_]:

min_=j

list[i],list[min_]=list[min_],list[i]# swap

print(list)

print('\n')

list=[8,4,11,6]

selection_sort(list)

打印出来的结果如下

Python

[8, 4, 11, 6]

[4, 8, 11, 6]

[4, 8, 11, 6]

[4, 6, 11, 8]

[4, 6, 11, 8]

[4, 6, 8, 11]

1

2

3

4

5

6

7

8

9

10

[8,4,11,6]

[4,8,11,6]

[4,8,11,6]

[4,6,11,8]

[4,6,11,8]

[4,6,8,11]

从第一组数可以看出,i 经过第一轮的循环后,把列表中最小的数字 4 提取了出来并和之前的第一位的数字 8 交换了位置。第一个最小的数字排好序后,接下来 i 继续往后循环,在后面三个数中最小的 6 交换到第二位。i 第三次循环时比较最后两个数字的大小,把相对小的排在第三位,最后一位不用排,自然就是最大的数字了。

以上的例子是把数字从小到大升序排列,如果需要从大到小降序排列呢?只需要把代码中 if 判断语句中的 < 符号改成 > 符号即可。

今天的 Python 算法选择排序比较简单,希望能帮助大家更好地理解。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值