使用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]
總結
以上是生活随笔為你收集整理的使用python完成冒泡排序_python 冒泡排序优化,用递归实现冒泡排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 曾称电池技术比宁德时代更先进 众泰汽车6
- 下一篇: 横向卷轴动作游戏《Robo Frenzy