关于排序算法的稳定性

  • 稳定:如果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
    
    	

排序算法稳定性:只要是比较大小交换时候,是“隔山交换”,就是中间还隔着元素进行交换,那这个排序算法就一定不能保证是稳定的。

稳定的选择排序:每次从未排序部分选择第一个最小元素后不与未排序部分第一个元素交换,而是插入到未排序部分第一个元素之前,这样是稳定的

插入排序:把未排序部分的第一个元素插入到已排序部分的合适位置,似乎一定要用到插入而不能使用交换

不稳定的选择排序:选择出最小元素后与未排序部分的第一个元素进行交换(似乎数组中交换的代价远远小于删除加上插入,所以选择排序大多是这样的)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值