算法-python

选择排序:一个列表被分为无序列表和有序列表,选择排序就是拿无序列表的第一个和后面的每一个相比较,每一趟选择出最小的一个,添加进有序列表。

def select_sort(list):
    for i in range(0,len(list)-1): #执行len(list)-1 趟
        min=i
        for j in range(i+1,len(list)):
            if list[j]<list[min]:
                min=j
        list[i],list[min]=list[min],list[i]
    return list
list=[5,7,3,2,9,1,6,4]
print(select_sort(list))

 插入排序:

# 插入排序
for j in range(1, len(A)):  # 假设第一个数是排序好的
    key = A[j]  # 取出当前未排序的数
    i = j-1  # 从后往前,先取未排序数的前一个数(已经排序好的数)
    while i >= 0 and A[i] > key:  # 若当前未排序的数比排序好的数还小 并且没有到数组的开头
        A[i+1] = A[i]  # 排序好的数往后挪一个位置
        i = i-1   # 取排序好的数的前一个数进行比较
    A[i+1] = key  # 插入当前要排序的数

 快速排序:

  

1)设置两个变量i、j,排序开始的时候:i=0,j=N-1;
2)以第一个数组元素作为关键数据,赋值给key,即key=A[0];
3)从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]和A[i]互换;
4)从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]互换;
5)重复第3、4步,直到i=j; (3,4步中,没找到符合条件的值,即3中A[j]不小于key,4中A[i]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。找到符合条件的值,进行交换的时候i, j指针位置不变。另外,i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)。
def quick_sort(data,left,right):
    if left<right:
        mid=partition(data,left,right)
        quick_sort(data,left,mid-1)
        quick_sort(data,mid+1,right)

def partition(data,left,right):
    tmp=data[left]
    while left<right:
        while left<right and data[right]>=tmp:
            right-=1
        data[left]=data[right]
        while left<right and data[left]<=tmp:
            left+=1
        data[right]=data[left]
    data[left]=tmp
    return left
原文地址:https://www.cnblogs.com/wxcx/p/9286496.html