排序算法
1.冒泡排序
冒泡排序算法的原理如下:
1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2.对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3.针对所有的元素重复以上的步骤,除了最后一个。
4.持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。

代码片
稳定算法,如果有序 最好O(n) 最差O(n^2)
alist=[3,2,5,6,4,8]
def bubble_sort(alist):
# 冒泡排序
n=len(alist)
for j in range(n-1):
for i in range(0,n-j-1):
# 从头走到尾
if alist[i]>alist[i+1]:
alist[i],alist[i+1]=alist[i+1],alist[i]
bubble_sort(alist)
print(alist)
#改进:如果是有序的 只会跑一次就返回了 时间复杂度O(n) 最差O(n^2)
alist=[3,2,5,6,4,8]
def bubble_sort(alist):
# 冒泡排序
n=len(alist)
for j in range(n-1):
count=0
for i in range(0,n-j-1):
# 从头走到尾
if alist[i]>alist[i+1]:
alist[i],alist[i+1]=alist[i+1],alist[i]
count+=1
if 0==count:
return
bubble_sort(alist)
print(alist)
2.选择排序
它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到全部待排序的数据元素排完。 选择排序是不稳定的排序方法。
代码片
不稳定算法,时间复杂度 最好O(n^2) ,最坏都是O(n^2)
alist=[3,2,1,2]
def selectsort(alist):
for j in range(len(alist)-1):
mindex=j
for i in range(j,len(alist)):
if alist[i]<alist[mindex]:
mindex=i
alist[j],alist[mindex]=alist[mindex],alist[j]
selectsort(alist)
print(alist)
3.插入排序
有一个已经有序的数据序列,要求在这个已经排好的数据序列中插入一个数,但要求插入后此数据序列仍然有序,这个时候就要用到一种新的排序方法——插入排序法,插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据,算法适用于少量数据的排序,时间复杂度为O(n^2)。是稳定的排序方法
代码片
不稳定算法,时间复杂度 最好O(n^2) ,最坏都是O(n^2)
alist=[3,2,1,2,5,8]
def insertsort(alist):
for i in range(1,len(alist)):
for j in range(i,0,-1):
if alist[j]<alist[j-1]:
alist[j],alist[j-1]=alist[j-1],alist[j]
insertsort(alist)
print(alist)
alist=[3,2,1,2,5,8]
def insertsort(alist):
for j in range(1,len(alist)):
i=j
while i>0:
if alist[i]<alist[i-1]:
alist[i],alist[i-1]=alist[i-1],alist[i]
i-=1
else:
break
insertsort(alist)
print(alist)