python实现cma—se算法_Python实现排序算法

00d10f91b5b6a4c61e708922cc991a38.png

前言冒泡排序快速排序插入排序希尔排序选择排序堆排序归并排序计数排序桶排序基数排序

00

前言

本章介绍使用Python实现场景的几种排序算法。分别有冒泡算法、快速排序、插入排序、希尔排序、选择排序、堆排序、归并排序、计数排序、桶排序、基数排序。

创建一个比较大的list,用于测试排序算法使用。

import numpy as np
import time

src_list = np.random.randint(1, 100000, (50000)).tolist()

01

冒泡排序

冒泡排序是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。

def bubble_sort(arr):
    n = len(arr)
    for i in range(n-1):
        for j in range(0, n-1-i):
            if arr[j] > arr[j+1] :
                arr[j], arr[j+1] = arr[j+1], arr[j]
    return arr
start = time.time()
result = bubble_sort(src_list)
end = time.time()
print ("耗时:%d 毫秒" % int(round((end - start) * 1000)))
耗时:197286 毫秒

02

快速排序

在一个数据集中取个数作为参考点,大于该数的元素放在其右边;小于该数的元素放在其左边。这样就将数据集分成两部分,大于参考值部分和小于参考值部分,递归该过程,直到序列中所有记录均有序。

def quick_sort(listt, left, right):
    if left >= right:
        return listt

    # 选择参考点,该调整范围的第1个值
    pivot = listt[left]
    low = left  
    high = right

    while left         # 从右边开始查找大于参考点的值
        while left and listt[right] >= pivot:
            right -= 1
         # 这个位置的值先挪到左边
        listt[left] = listt[right] 

         # 从左边开始查找小于参考点的值
        while left and listt[left] <= pivot:
            left += 1
         # 这个位置的值先挪到右边
        listt[right] = listt[left]

    # 写回改成的值
    listt[left] = pivot

    # 递归,并返回结果
    quick_sort(listt, low, left - 1)    # 递归左边部分
    quick_sort(listt, left + 1, high)   # 递归右边部分
    return listt
start = time.time()
result = quick_sort(src_list, 0, 1000)
end = time.time()
print ("耗时:%d 毫秒" % i
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值