美文网首页
python 冒泡排序优化,用递归实现冒泡排序

python 冒泡排序优化,用递归实现冒泡排序

作者: 阿登20 | 来源:发表于2020-09-19 22:11 被阅读0次

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


#!/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 冒泡排序优化,用递归实现冒泡排序

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

  • 看图说话排序算法之冒泡排序

    排序算法的种类非常多,这里总结冒泡排序和对冒泡排序的改进---快速排序的循环实现和递归实现。 一丶冒泡排序 假设待...

  • 冒泡排序的C语言实现

    冒泡排序 优化后的冒泡排序

  • 经典排序算法总结

    经典排序算法集锦 冒泡法 排序算法入门之冒泡排序 排序算法入门之冒泡排序优化

  • 常见算法的 Python 实现

    二分法查找 非递归版本: 递归方法实现: 冒泡排序 选择排序

  • 算法-冒泡排序

    算 法:冒泡排序算法时间复杂度: 冒泡排序算法概述 冒泡排序伪代码 冒泡排序实现 冒泡排序算法概述 冒泡排...

  • 2020-08-21 算法合集

    1. 冒泡排序 2.选择排序 3. 插入排序 4. 希尔排序 5. 归并排序(递归实现) 6. 快速排序(递归实现...

  • | 算法

    冒泡排序 逻辑:极值冒泡,迭代;通过设置正序标识变量,优化排序计算 测试: 快速排序 逻辑:找基准,三分法,使用了递归

  • 七大排序算法的 Python

    本文用Python实现了插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、基数排序。 1、插...

  • 八大排序算法的 Python 实现(转)

    本文用Python实现了插入排序、希尔排序、冒泡排序、快速排序、直接选择排序、堆排序、归并排序、基数排序。 1、插...

网友评论

      本文标题:python 冒泡排序优化,用递归实现冒泡排序

      本文链接:https://www.haomeiwen.com/subject/dlmyyktx.html