使用python完成冒泡排序_python 冒泡排序优化,用递归实现冒泡排序

下面代码是冒泡排序逐步优化,写代码用递归也可以实现。什么冒泡排序就不写了,百度解释很详细。对理论不是很感兴趣。

#!/usr/bin/env python3

# -*- coding: utf-8 -*-

"""

===========================

# @Time : 2020/9/19 19:54

# @File : 冒泡排序.py

# @Author: adeng

# @Date : 2020/9/19

============================

"""

import random,time

list_nums = random.sample(range(0,20000,3),12)

print(list_nums)

#---------------------for循环------------------

count = 0

for i in range(len(list_nums)):

pass

flag = True

for j in range(len(list_nums)-1-i):

count += 1

if list_nums[j] > list_nums[j+1]:

flag = False

list_nums[j], list_nums[j+1] = list_nums[j+1], list_nums[j]

if flag:

break

print(list_nums)

# 查看比较多少次

print("比较的次数为{}".format(count))

#-------------------------while循环---------------------

i = 0

count =0

while i < len(list_nums):

j = 0

while j< len(list_nums)-1 -i:

count += 1

if list_nums[j] > list_nums[j + 1]:

list_nums[j], list_nums[j+1] = list_nums[j+1], list_nums[j]

j += 1

i += 1

print(list_nums)

print("比较的次数为{}".format(count))

# 优化冒泡排序

# ---------------------------优化冒泡排序------------

i = 0

count1 =0

start_time = time.time()

while i < len(list_nums):

flag = True # 假设每一趟都没有换行

j = 0

while j< len(list_nums)-1 -i:

count1 += 1

if list_nums[j] > list_nums[j + 1]:

list_nums[j], list_nums[j+1] = list_nums[j+1], list_nums[j]

flag = False # 交换了大小,flag为False

j += 1

if flag:

# 这一趟走完以后,flag依然为True,说明这一趟没有进行数据交换

break

i += 1

end_time = time.time()

print(f"冒牌排序花费时间{end_time-start_time}秒")

print(list_nums)

print("比较的次数为{}".format(count1))

#------------------------递归----------------------------------

from typing import List

def array_init(array: List[int], n:int) -> List:

i = 0

j = 1

while j < len(array):

if array[i] > array[j]:

array[i], array[j] = array[j], array[i]

i += 1

j += 1

if n == 1:

# print("array:",array)

return array

return array_init(array, n - 1)

start_time = time.time()

print(array_init(list_nums, len(list_nums)))

end_time = time.time()

print(f"冒牌排序花费时间{end_time-start_time}秒")

# ------------------------------封装---------------

def get_random_list(num:int,length)-> list:

"""

获取一个随机列表

@param array: 列表

@return: 返回一个列表

"""

return random.sample(range(num),length)

def sort_iter(list_num:list,reverse=False) -> list:

"""

@param list_num: 列表排序

@param reverse: False 升序 True 降序

@return: 返回列表

"""

global count

count = 0

for i in range(len(list_num)):

pass

flag = True

for j in range(len(list_num) - 1 - i):

count += 1

if not reverse:

if list_num[j] > list_num[j + 1]:

flag = False

list_num[j], list_num[j + 1] = list_num[j + 1], list_num[j]

else:

if list_num[j] < list_num[j + 1]:

flag = False

list_num[j], list_num[j + 1] = list_num[j + 1], list_num[j]

if flag:

break

return list_num

print(sort_iter([3,2,1,10,8,3,6,],reverse=True),count)

def sort_lists(list_num:list,reverse=False) ->list:

"""

@param list_num: 列表,元素要是int类型

@param reverse: False 升序,True降序

@return: 返回列表

"""

i = 0

count = 0 # 统计比较了多少次

while i < len(list_num):

flag = True # 假设每一趟都没有换行

j = 0

while j < len(list_num) - 1 - i:

count += 1

if not reverse:

if list_num[j] > list_num[j + 1]:

list_num[j], list_num[j + 1] = list_num[j + 1], list_num[j]

flag = False # 交换了大小,flag为False

else:

if list_num[j] < list_num[j + 1]:

list_num[j], list_num[j + 1] = list_num[j + 1], list_num[j]

flag = False # 交换了大小,flag为False

j += 1

if flag:

# 这一趟走完以后,flag依然为True,说明这一趟没有进行数据交换

break

i += 1

return list_num

a = [3,1,5,6,4,3,0]

sort_lists(a,reverse=True)

print(a) # [6, 5, 4, 3, 3, 1, 0]

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值