'''
冒泡排序:
1)比较相邻的元素。如果第一个比第二个大,就交换他们两个的位置。
2)对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。完成一次完整的比较和交换位置时,最后的元素应该会是最大的数。
3)针对所有的元素重复以上的步骤,除了最后一个。
4)持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
时间复杂度:O(n^2)
稳定性:稳定排序算法
'''
def bubble ( mylist) :
for i in range ( len ( mylist) ) :
for j in range ( i+ 1 , len ( mylist) ) :
if mylist[ i] > mylist[ j] :
mylist[ i] , mylist[ j] = mylist[ j] , mylist[ i]
return mylist
if __name__ == '__main__' :
mylist = [ 2 , 3 , 4 , 2 , 1 , 7 , 8 , 5 , 99 , 0 , 1 , 45 ]
print ( bubble( mylist) )
'''
选择排序:
初始状态:无序区为R[1..n],有序区为空。
1)第1趟排序
在无序区R[1..n]中选出关键字最小的(最大的)记录R[k],将它与无序区的第1个(无需的数组的第一个元素一定是有序的)记录R[1]交换,使R[1..1]和R[2..n]分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
2)重复上述的操作,每一次从后面无序的数组取出一个元素放进前面的有序数组中,之后有序数组个数增加,无序数组个数减少
……
i)第i趟排序
第i趟排序开始时,当前有序区和无序区分别为R[1..i-1]和R(i..n)。该趟排序从当前无序区中选出关键字最小的记录 R[k],将它与无序区的第1个记录R交换,使R[1..i]和R分别变为记录个数增加1个的新有序区和记录个数减少1个的新无序区。
时间复杂度:O(n^2)
稳定性:不稳定排序算法
'''
def selection ( mylist) :
for i in range ( len ( mylist) ) :
min = i
for j in range ( i+ 1 , len ( mylist) ) :
if mylist[ min ] > mylist[ j] :
min = j
mylist[ i] , mylist[ min ] = mylist[ min ] , mylist[ i]
return mylist
if __name__ == '__main__' :
mylist = [ 2 , 3 , 4 , 2 , 1 , 7 , 8 , 5 , 99 , 0 , 1 , - 1 , - 6 , 45 ]
print ( selection( mylist) )