python 写的快速排序
def paixu(list1): 第一种方法比较简单,就是跟List1的第一个元素座大小的比较,也比较好理解的, if len(list1)==0: return list1 else: a=list1[0] b=[ ] c=[ ] for x in list1[1:]: if x<a: c.append(x) else: b.append(x) s=paixu(b) m=paixu(c) return m+[a]+s 第二种方法(quick sort) 他的原理是 這邊所介紹的快速演算如下:
廻圈處理:
透過以下演算法,則軸左邊的值都會小於s,軸右邊的值都會大於s,如此再對軸左右兩邊進行遞迴,就可以對完成排序的目的,例如下面的實例,*表示要交換的數,[]表示軸:
然后代码是这样的:
def paixu(list1, m, n): 这里的M的值一般设为0,而n的值的为len(list1)-1,也就是list1这个序列的最大元素位置 if m < n: 这里是判断,其实m<n是必须的, s = list1 - 这里把list1的第一个元素作为判断大小的依据
i = m j = n + 1 while True: while i + 1 < len(list1): i += 1 if list1[i] >= list1 -:
break while j - 1 > -1: j - = 1 if list1[ j ] <= list1 -:
break if i >= j: break list1[i], list1[ j ] = list1[ j ] , list1[ i ] 这里是将i<j的元素中的大值换到后边的小值,也就是前边的 list1 -, list1[ j ] = list1[ j ], list1 - 这里是将第一个元素替换到循环到lsit1[J]的值
realsort(list1, m, j - 1) 将list1 -前边的值再进行替换
realsort(list1, j + 1, n) 将list1 -后便的值进行替换
return list1 |