Python实现冒泡排序和快速排序

@Python实现冒泡排序和快速排序

冒泡排序

#冒泡排序:每一次相邻的两个数做比较,大的往后移动一位,每次循环都会把最大的值(升序)或最小的值(降序)放在末端

# 冒泡排序
a = [6,1,9,2,15,11]
num = len(a)

for n in range(0,num-1):
    is_change = False    
    for m in range(0, num-1-n):     
        if a[m] > a[m+1]:    
            a[m], a[m+1] = a[m+1], a[m]     #相邻的两个值比较后,a[m]与a[m+1]互换位置
            is_change  = True
    if not is_change:
        break
print(a)

最优时间复杂度: O(n)
最坏时间复杂度: O(n^2)
空间复杂度: O(1)

#例如冒泡排序
a = [6,1,9,2,15,11]

冒泡排序对a进行从小到大排序

6,1,9,2,15,11
第一次循环
一、 1,6,9,2,15,11
二、 1,6,9,2,15,11
三、 1,6,2,9,15,11
四、 1,6,2,9,15,11
五、 1,6,2,9,11,15

第二次循环
1,6,2,9,11
一、 1,6,2,9,11
二、 1,2,6,9,11
三、 1,2,6,9,11
四、 1,2,6,9,11

第三次循环
1,2,6,9
一、1,2,6,9
二、1,2,6,9
三、1,2,6,9

第四次循环
1,2,6
一、1,2,6
二、1,2,6

第五次循环
1,2
一、1,2

快速排序

#快速排序:先拿第一个数与其余的全部数依次做比较,每次循环都把最大的值(降序)或最小的值(升序)放在首位

#快速排序:
a = [6, 1, 9, 2, 15, 11]
num = len(a)
for i in range(0, num-1):
    for j in range(i+1, num):   #每次循环,拿a[i]的值跟(a[i+1]-a[num])的值依次做比较
        if a[i]<a[j]:
            a[i], a[j] = a[j], a[i]
print(a)

最优时间复杂度: O(n log n)
最坏时间复杂度: O(n^2)
空间复杂度: O(1)

#快速排序

例如:6,1,9,2,15,11

1 6,9,2,15,11

2 9,6,15,11

6 9,15,11

9 15,11

11 15

15

  • 6
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
冒泡排序和选择排序都是常见的排序算法,下面是它们的Python实现冒泡排序: ```python def bubbleSort(alist): for i in range(len(alist)): for j in range(len(alist)-1, i, -1): if alist\[j\] < alist\[j-1\]: temp = alist\[j\] alist\[j\] = alist\[j-1\] alist\[j-1\] = temp a = \[3, 2, 8, 9, 1, 5, 6, 4, 7\] bubbleSort(a) print(a) ``` 这段代码使用了两层循环,外层循环控制比较的轮数,内层循环进行相邻元素的比较和交换,将较大的元素逐渐“冒泡”到数列的顶端。 选择排序: ```python def selectionSort(alist): for i in range(len(alist)-1): minIndex = i for j in range(i+1, len(alist)): if alist\[j\] < alist\[minIndex\]: minIndex = j alist\[i\], alist\[minIndex\] = alist\[minIndex\], alist\[i\] a = \[3, 8, 5, 7, 2, 1, 4, 6, 9\] selectionSort(a) print(a) ``` 这段代码也使用了两层循环,外层循环控制每次选择的起始位置,内层循环找到未排序部分的最小元素,并将其与起始位置的元素交换。 请注意,以上代码只是简单的示例,实际使用时可能需要考虑更多的边界情况和优化。 #### 引用[.reference_title] - *1* *2* [python中常见的排序:选择排序冒泡排序](https://blog.csdn.net/Awen0201/article/details/121320820)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [排序算法:冒泡排序、选择排序快速排序 —— Python 实现](https://blog.csdn.net/qq_41140138/article/details/118494902)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值