排序问题一(冒泡、选择、插入)

简介

将一组无序的列表调整为有序的列表,Python 内置的排序函数:sort()
常见排序方法:
(1)最简单但速度一般的排序:冒泡排序、选择排序、插入排序
(2)高级速度快的排序: 快速排序、堆排序、归并排序
(3)其他种类: 希尔排序、计数排序、基数排序
在这里插入图片描述
稳定的排序是两个元素一样时候,保证两个元素相对位置不改变的排序。

冒泡排序

列表每两个相邻的数,如果前面比后面大,则交换两个数,一趟排序完成之后,无序区减少一个数,有序区增加一个数。
时间复杂度:O(n2)
代码关键点:趟、无序区范围。
冒泡排序

def Bubble_sort(lista, reverse=False):
	for i in range(len(lista)-1): #第i趟,一共n-1趟
		exchange = False  # 判断是否已经排好序
		for j in range(len(lista)-i-1):
			if reverse:
				if lista[j] < lista[j+1]:
					lista[j], lista[j+1] = lista[j+1], lista[j]
					exhcange = True
			else:
				if lista[j] > lista[j+1]:
					lista[j], lista[j+1] = lista[j+1], lista[j]
					exchange = True
			print(lista)
		if not exchange:
			return #排好序就退出

选择排序

第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后再从剩余的未排序元素中寻找到最小(大)元素,然后放到已排序的序列的末尾。以此类推,直到全部待排序的数据元素的个数为零。选择排序是不稳定的排序方法。
时间复杂度:O(n2)
代码关键点: 有序区和无序区、无序区最小数的位置
选择排序

def easy_select_sort(lista):
	new_list = list()
	for i in range(len(lista)):
		min_value = min(lista)
		new_list.append(min_value)
		lista.remove(min_value)
	return new_list
	
			
def select_sort(lista):
	for i in range(len(lista)-1):   # 第i趟,总共n-1趟
		min_index = i
		for j in range(i+1, len(lista)):
			if lista[j] < lista[min_index]:
				min_index = j
		lista[i], lista[min_index] = lista[min_index], lista[i]
	return lista

插入排序

一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动。
时间复杂度:O(n2)
代码关键点: 趟,有序区指针位置
插入排序

def insert_sort(lista):
	for i in range(1, len(lista)): # i 表示后面一个数的下标
		temp = lista[i]
		j = i-1 # 指针的数的下标  
		while j >= 0 and lista[j] > tmp:
			lista[j+1] = lista[j]
			j -= 1
		lista[j+1] = temp
		print(lista)
	return lista
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值