- 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的前面。
- 不稳定:如果a原本在b的前面,而a=b,排序之后 a 可能会出现在 b 的后面。
def bubble_sort(arr):
for i in range(0,len(arr)):
for j in range(0,len(arr)-1-i):
if arr[j]>arr[j+1]:
tmp = arr[j]
arr[j]=arr[j+1]
arr[j+1]=tmp
def select_sort(arr):
min_index = -1
min = arr[0]
for I in range(len(arr)-1):
for j in range(I,len(arr)):
if arr[j]<min:
min_index = j
tmp = arr[i]
arr[i] = arr[j]
arr[j] =tmp
def insert_sort(arr):
for i in range(1,len(arr)):
cur = arr[i]
preindex = i-1
while cur < arr[preindex] and preindex>=0:
arr[preindex+1] = arr[preindex]
preindex -= 1
arr[preindex+1] = cur
排序算法稳定性:只要是比较大小交换时候,是“隔山交换”,就是中间还隔着元素进行交换,那这个排序算法就一定不能保证是稳定的。
稳定的选择排序:每次从未排序部分选择第一个最小元素后不与未排序部分第一个元素交换,而是插入到未排序部分第一个元素之前,这样是稳定的
插入排序:把未排序部分的第一个元素插入到已排序部分的合适位置,似乎一定要用到插入而不能使用交换
不稳定的选择排序:选择出最小元素后与未排序部分的第一个元素进行交换(似乎数组中交换的代价远远小于删除加上插入,所以选择排序大多是这样的)