Python 快速排序

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])
原文地址:https://www.cnblogs.com/wztshine/p/13031437.html