算法思想:
- 比较相邻的元素,如果是逆序就交换;
- 对每一对相邻元素作同样的工作;
- 针对所有元素重复以上的步骤,除最后一个;
- 重复以上步骤
代码实现:
def Bubble_Sort(data):
flag=True
for i in range(len(data)-1):
flag=True
for j in range(len(data)-1-i):
if data[j+1]<data[j]:
data[j+1],data[j]=data[j],data[j+1]
flag=False
if flag:
return data
return data
data=[1,4,2,8,3,9,10]
print(Bubble_Sort(data))
时间复杂度为:O(n^2),最好的时候是O(n)
空间复杂度为:O(1)
稳定性算法
选择排序
算法思想:
-首先在未排序序列中找到最大(最小)元素,存放到排序序列的起始位置
- 然后再从剩余未排序元素中继续寻找最大(小)元素,将其放到已排序序列末尾
- 重复以上操作,直到排序完毕
代码实现:
def Select_Sort(data):
for i in range(len(data)-1):
minIndex=i
for j in range(i+1,len(data)):
if data[j]<data[minIndex]:
data[j],data[minIndex]=data[minIndex],data[j]
data[i],data[minIndex]=data[minIndex],data[i]
return data
data=[1,4,2,8,3,9,10]
print(Select_Sort(data))
时间复杂度为:O(n^2)
空间复杂度:O(1)
稳定性:不是
插入排序
有序+无序
算法思想:
- 构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应的位置插入
代码实现
def Insert_Sort(data):
for i in range(1,len(data)):
preIndex=i-1
current=data[i]
while preIndex>=0 and data[preIndex]>current:
data[preIndex+1]=data[preIndex]
preIndex-=1
data[preIndex+1]=current
return data
时间复杂度:O(n^2)
空间复杂度:O(1)
稳定算法