def quicksort(array): if len(array)<2: return array else: pivot = array[0] # 基准点 small = [i for i in array[1:] if i <= pivot] # 找到小于基准点的部分 big = [i for i in array[1:] if i > pivot] # 大于基准点的部分 return quicksort(small) + [pivot] + quicksort(big) # 合并 print(quicksort([10,2,6,12,39,10]))
1. 快速排序
对于一个待排序的列表,先选一个基准值,让列表中的元素和这个基准值对比,分成两部分:大于这个值的部分、小于这个值的部分;再分别对这两个部分进行找基准值的操作,最后将这个最小部分、基准值、最大部分合并。
2. 冒泡排序
冒泡排序的逻辑很简单:对n个数,每次只比较2个数。1和2比较,谁大谁放在后面,2再和3比较,3和4比较...n-1和n比较,这样到最后,最大的数就被放在了最后一个位置。继续循环,1和2,2和3,n-2和n-1(第一次循环最大数已经放在最后一个位置了,不用再比了)。。。
# 冒泡排序 def bubble(array): n = len(array) for i in range(n): # 第一层循环,只是为了循环次数,每循环一次,只能将一个最大数放到后面 for j in range(n-i-1): # 第二层循环,查找最大数,一直将它挪放到后面 if array[j] > array[j+1]: array[j],array[j+1] = array[j+1],array[j] return array print(bubble([5,2,3,9,1,0]))
3. 选择排序
选择排序和冒泡有些像,冒泡是每次挪动一个数,选择是每次比较一个数。
对于n个数,
loop1:将第一个数和后面全部的数比较,找到最小数,放到第一位
loop2:将第二个数和后面所有的数比较,找到最小数,放到第二位
....
所以,选择排序每次只挪动一次数,而不像冒泡每两个数比较一次就挪动一次。
def selectSort(arr): for i in range(len(arr)): min = i # 记录最小值的索引 for j in range(i+1,len(arr)): if arr[j] < arr[min]: min = j if i != min: # 如果当前索引的值不是最小值 arr[i],arr[min] = arr[min],arr[i] return arr arr = selectSort([1,5,2,8,9,3])