一.排序
1.冒泡排序
-
原理
有一列数据,从第一个数开始,第一个和第二个进行比较,如果第一个大就交换,如果第二个大就不变,再第二个和第三个比较,一次类推,第二轮是从第一个数开始比到倒数第二个数,第三轮是从第一个数比到倒数第三个数.以此类推. -
代码
def bubble(nums):
for j in range(len(nums)-1,0,-1): # 7,6,5,4,3,2,1
for i in range(j):
if nums[i]>nums[i+1]:
nums[i],nums[i+1]=nums[i+1],nums[i]
return nums
nums=[2,5,6,3,4,9,1]
print(bubble(nums))
- 解析
内层循环表示比较的范围,外层循环用来表示比较的轮数
2.选择排序
-
原理
在未排序的列表中,找出一个最大(小)值,通常找的最大值或者最小值就是列表的第一个元素位置
然后在未排序的列表中依次找出最大(小)元素位置,
跟假设的位置进行比较,如果原有位置与找到的最大(小)位置发生改变
则进行交换 -
代码
def select(nums):
for i in range(0,len(nums)):
for j in range(i):
if nums[i]<nums[j]:
nums[i],nums[j]=nums[j],nums[i]
return nums
nums=[1,5,3,7,4,9]
print(select(nums))
- 解释
内层循环表示每一轮的第一个数和后面的数依次进行比较,外层循环用来实现内层循环开始的第一个数.
3.插入排序
-
原理
通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。 -
代码实现
def insert(nums):
for i in range(1,len(nums)):
for j in range(0,i):
if nums[i]<nums[j]:
nums[i],nums[j]=nums[j],nums[i]
return nums
nums=[1,5,3,7,4,9]
print(insert(nums))
- 解释
从第n个数和前n-1个数依次进行比较,外层用来表示从第一个数到第n-1个数,内层用来表示前n-1个数.
4.快速排序
- 原理
从数列中挑出一个元素,称为"基准";
重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面;在这个分区结束之后,该基准就处于数列的中间位置;
递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。