part1:冒泡排序
冒泡排序的核心:一步一步交换相邻位置的数据!
代码示例
- for 循环实现。
def bubble_sort1(arr):
# 交换的细节
def swap(i,j):
arr[i],arr[j]=arr[j],arr[i]
n =len(arr)
# 一步一步比较
for i in range(n):
for j in range(n-i):
# 定义交换规则,顺序
if j+1<n-i and arr[j]>arr[j+1]:
# 交换相邻位置
swap(j,j+1)
- while 循环实现。
def bubble_sort2(array):
def swap(i,j):
array[i],array[j]=array[j],array[i]
n=len(array)
swapped = True
# 相邻位置是否交换
while swapped:
# pass
swapped =False
for i in range(1,n):
if array[i-1] >array[i]:
swap(i-1,i)
swapped =True
part2:选择排序
核心思想:可以将一个原始列表划分成有序和无序两部分,每次从无序部分挑选出最值加入有序部分的一侧,直到该列表完全有序。
代码示例
def selection_sort(arr):
n = len(arr)
for i in range(n-1):
smallNdx =i
# find small value
for j in range(i+1,n):
if arr[j]<arr[smallNdx]:
smallNdx=j
# swap
if smallNdx!=i:
arr[i],arr[smallNdx] =arr[smallNdx],arr[i]
return arr
part3:插入排序
在学习插入排序的时候,你可以将它与选择排序作对比。选择排序是在无序部分中挑选出最值加入有序部分的一测;插入排序是在无序部分的一侧挑选出值,插入到有序部分的合适位置。这样一比较,是不是清晰了很多?
代码示例
def insertion_sort(arr):
n =len(arr)
for i in range(1,n):
value = arr[i]
pos =i
# find insert position
while pos>0 and value<arr[pos-1]:
arr[pos] =arr[pos-1]
pos -=1
arr[pos] = value
return arr