排序算法:冒泡排序、选择排序和快速排序 —— Python 实现

1. 冒泡排序

在这里插入图片描述
Python 实现:

import time
import random

def bubbleSort(alist):
	for i in range(len(alist)):
		for j in range(len(alist)-1, i, -1):
			if alist[j] < alist[j-1]:
				temp = alist[j]
				alist[j] = alist[j-1]
				alist[j-1] = temp

a = [random.random() for i in range(10000)]
t1 = time.time()
bubbleSort(a)
t2 = time.time()
print(t2 - t1)

排序 10000 个数字耗时 8.510238409042358 s



2. 选择排序

由于冒牌排序需要交换的次数太多,选择排序在每一轮寻找最小值,将最小值与上方第一个未排序的数据交换,从而节约了时间.

选择排序动态图:
在这里插入图片描述

Python 实现:

import time
import random

def selectSort(alist):
	for i in range(len(alist)):
		minValIndex = i
		for j in range(i, len(alist)):
			if a[minValIndex] > a[j]:
				minValIndex = j
		temp = a[i]
		a[i] = a[minValIndex]
		a[minValIndex] = temp

a = [random.random() for i in range(10000)]
t1 = time.time()
selectSort(a)
t2 = time.time()
print(t2 - t1)

排序 10000 个数字耗时4.438132286071777s



3. 快速排序

快速排序中使用了一个基数和 2 个哨兵,在每一轮排序中将小于基数的数放在左侧,大于基数的数放在右侧,每一轮排序后将原始数据划分为两个区间,随后继续对子区间排序:

快速排序动态图:

在这里插入图片描述

Python 实现:

import time
import random

def quickSort(alist):
	quickSortHelper(alist, first=0, last=len(alist)-1)

def quickSortHelper(alist, first, last):
	if first < last:
		base = alist[first]
		l = first
		r = last
		while r != l:
			while alist[r] >= base and r != l:
				r -= 1
			while alist[l] <= base and l != r:
				l += 1
			if l != r:
				temp = alist[l]
				alist[l] = alist[r]
				alist[r] = temp
		alist[first] = a[l]
		a[l] = base
		quickSortHelper(alist, first, l-1)
		quickSortHelper(alist, l+1, last)

a = [random.random() for i in range(10000)]
t1 = time.time()
quickSort(a)
t2 = time.time()
print(t2 - t1)

排序 10000 个数字耗时 0.022938966751098633s


REFERENCES:

1. 排序动态图
2. Python 数据结构与算法分析


完结 🍻

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值