要求:将数组中元素按照从小到大对列表,进行排序
一、冒泡排序
bubble_list=[4,213,5,6,12,123,45,66,43]
def bubble(array):
for i in range(len(array)-1): ##外循环,每次循环找出最大值放在最右边,下一次则忽略前面循环找出的数
for j in range(len(array)-1-i): ##内循环,和下一个数比较,若第一个数较大,则进行交换
if array[j]>array[j+1]:
tmp=array[j]
array[j]=array[j+1]
array[j+1]=tmp
bubble(bubble_list)
print "Final:%s" % bubble_list
Final:[4, 5, 6, 12, 43, 45, 66, 123, 213]
二、选择排序
select_list=[25,213,5,6,12,123,45,66,43]
def select(array):
for i in range(len(array)-1): ##从第一个数开始依次与后面的数对比,若有数比数组中第一个小,则进行交换。循环len(array)-1次。
for j in range(i+1,len(array)):
if array[i]>array[j]:
tmp=array[i]
array[i]=array[j]
array[j]=tmp
select(select_list)
print "Final:%s" % select_list
这样的选择排序有一个弊端,i每次循环,都可能有很多数据交换过程,因此,怎样解决这样的问题呢?
只需要引入一个变量,least_index每次判断大小后,只需要把数值更小的下标赋值给least_index即可。
select_list=[25,213,5,6,12,123,45,66,43]
def select_plus(array):
for i in range(len(array)-1):
least_index=i
for j in range(i+1,len(array)):
if array[least_index]>array[j]:
least_index=j
tmp=array[i]
array[i]=array[least_index]
array[least_index]=tmp
select_plus(select_list)
print "Final:%s" % select_list
三、插入排序
insert_list=[25,213,5,6,12,123,45,66,43]
def insert(array):
for i in range(1,len(array)): #从数组中第二个数与与左边的数进行对比
position=i
current_var=array[position] ##保留array[i]中的值
while array[position-1]>current_var and position>0: ##当左边的数大于插入数,则将两数进行交换,直到数组进行到数组首位
array[position]=array[position-1]
array[position-1]=current_var
position-=1
insert(insert_list)
print "Final:%s" % insert_list
Final:[5, 6, 12, 25, 43, 45, 66, 123, 213]
四、快速排序
通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
"""
quick_list = [69, 471, 106, 66, 149, 983, 160]
def quickSort(L, low, high):
i = low
j = high
if i >= j:
return L
key = L[i]
while i < j:
while i < j and L[j] >= key:
j = j-1
L[i] = L[j]
while i < j and L[i] <= key:
i = i+1
L[j] = L[i]
L[i] = key
quickSort(L, low, i-1)
quickSort(L, j+1, high)
return
quickSort(quick_list,0,len(quick_list)-1)
print quick_list