1、冒泡算法
遍历数组,两两进行比较,元素大的和小的进行交换,一次可以出一个最大值或最小值,O(n²)
nums = [1,2,3,4,5,6,7,8,9]
length = len(nums)
for i in range(length):
flag = False # 假定没有达到目标顺序
for j in range(length-1-i):
if nums[j] > nums[j+1]:
nums[j], nums[j+1] = nums[j+1], nums[j]
flag = True # 说明进行交换过,两两进行比较的时候出现了顺序不对i的情况
if not flag:
break
2、简单选择排序与二元选择排序
寻找最大或最小值,依次比较,然后交换,每一次出一个会两个值,减少了交换次数,提高了效率,性能略好于冒泡
nums = list(range(10))
import random
random.shuffle(nums)
length = len(nums)
for i in range(length):
maxindex = i
for j in range(maxindex+1, length):
if nums[j] > nums[maxindex]:
maxindex = j
if maxindex != i:
nums[i], nums[maxindex] = nums[maxindex], nums[i]
length = len(nums)
for i in range(length//2): # 总共需要循环次数
maxindex = i
minindex = -1-i
minorigin = length + minindex
for j in range(maxindex+1, length-i): # 一次固定两个值
if nums[j] > nums[maxindex]:
maxindex = j
if nums[-j-1] < nums[mimindex]:
minindex = -j-1
else:
minindex = length + minindex # 将负索引调整为正索引
if maxindex != i:
nums[i], nums[maxindex] = nums[maxindex], nums[i]
if minindex == i:
minindex = maxindex # 修正索引
if minindex != miorgin and nums[minindex] != nums[minorigin]:
nums[minorigin], nums[minindex] = nums[minindex], nums[minorigin]