常用排序算法实现

import random
import math
import queue

num_lib = [random.randint(1, 10) for i in range(10)]
print(num_lib)

def buble_sort():
    for j in range(len(num_lib)-1):
        for i in range(len(num_lib)-1):
            if num_lib[i] < num_lib[i+1]:
                num_lib[i],num_lib[i+1] = num_lib[i+1],num_lib[i]
    print(num_lib)

#选择排序,采用额外新增列表的方式实现
def select_sort():
    sort_list = []
    for i in range(len(num_lib)):
        temp_num = 0
        for j in range(len(num_lib)):
            if num_lib[j] > temp_num:
                temp_num = num_lib[j]
        sort_list.append(temp_num)
        num_lib.remove(temp_num)
    print(sort_list)

#选择排序,采用不新增列表的方式实现,顺序取出值和剩下的结果进行比较,将最大的值放在未排序的前方,不停的交互索引位置
def select_sorts():
    for i in range(len(num_lib)):
        for j in range(i,len(num_lib)):
            if num_lib[j] > num_lib[i]:
                num_lib[i],num_lib[j] = num_lib[j],num_lib[i]
    print(num_lib)

#插入排序,顺序取出值和前边已经取出的值进行比较,将值放在指定的位置,和选择排序相对,一个是和未进行排序的结果进行比较放入,另一个是和已进行排序的结果进行比较放入
def insert_sorts():
    for i in range(len(num_lib)):
        for j in range(i):
            if num_lib[i] > num_lib[j]:
                num_lib[i],num_lib[j] = num_lib[j],num_lib[i]
    # print(num_lib)
    return num_lib

#快速排序,采用分治的方法,不停的将数据进行二分,直到无法继续分为止后输出结果,分治思想比较浓重。本意应是随机取一个数,将大于这个数的值,全部放到左边,小于这个数的值放到右边,然后不停的进行分治,直到最后无法进行分即可
def quick_sort(num_lib):

    if len(num_lib) <= 1:
        return num_lib
    else:
        l_list = []
        r_list = []
        for i in range(1,len(num_lib)):
            if num_lib[0] < num_lib[i]:
                l_list.append(num_lib[i])
            else:
                r_list.append(num_lib[i])
        l_list.append(num_lib[0])
        return quick_sort(l_list) + quick_sort(r_list)

#归并排序

#计数排序,不需要进行比较就可以进行排序的算法理论
def count_sort():
    max_vaule = max(num_lib)
    print(max_vaule)
    count_list = [0] * (max_vaule + 1)
    print(count_list)
    for num in num_lib:
        count_list[num] += 1
    print(count_list)
    for i in range(1,len(count_list)):
        count_list[i] += count_list[i - 1]
    print(count_list)
    sort_arr = [0] * len(num_lib)
    for nums in num_lib:
        index_arr = count_list[nums] - 1
        sort_arr[index_arr] = nums
        count_list[nums] -= 1
    print(sort_arr)

#从30个人中选择15个,所有人围成一圈数1-9的数,喊到9的人出列即可
#让每个人报数,按照1-9对每次报数的人进行记录,将报到9的人剔除即可(在这里其实也是用基础的排序,即30人的编号作为起始的编号,主要信息:初始化编号和每个人所报数字,且每报到9后需要重新从1开始报数)
def nine_retire():
    origin_num = [i for i in range(1,31)]
    temp_list = []
    s = 0
    while len(origin_num) > 15:
        for j in origin_num:
            s += 1
            if s % 9 == 0:
                temp_list.append(j)
                origin_num.remove(j)
                s = 1
    print(origin_num)
    print(temp_list)

基础算法python实现,许多基础算法借鉴意义比较大,比如排序,我们总是会觉得,要想排序,比较必不可少,但其实我们发现不用经过比较也可以实现排序。思维方式上的转变。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值