python 排序(冒泡排序,选择排序,快速排序)

1.冒泡排序:

1.第一轮,从第一个元素开始,第一个元素和后面的元素对比,如果比第一个元素大,就交换位置。每个相邻的元素进行比较,一轮后,最小的就排在了最后。

2.第二轮,从第二个元素开始和后面的元素作比较,如果比第二个元素大就交换位置,每个相邻的元素进行比较。

3.比较轮数为元素的个数-1

#冒泡排序
num1 = [6,4,3,2,1]
#控制比较轮次
for i in range(1,len(num1)):
    #每一轮比较后,往后挪动一位继续下一轮比较
    for j in range(len(num1)-i)
        if num1[j] > num1[j+1]:
            num1[j],num1[j+1] = num1[j+1],num1[j]

print(num1)        
            

结果:[1, 2, 3, 4, 6]

2.选择排序

选择排序思路

1.从第一个元素开始,第一个元素依次和后面的每个元素比较,如果第一个元素大就交换位置,第一轮比较后,最小的元素就放在了第一个位置

2.第二轮在第二个元素开始和后面的每个元素依次比较,如果第二个元素大,就交换位置。

#选择排序
def SelecterSort(n):
    #控制比较轮次
    for i in range(len(n)):
        #第i个元素和后面的每个元素依次比较
        for j in range(i+1,len(n)):
            if n[i]>n[j]:
                n[i],n[j] = n[j],n[i]
    print(n)

n = [3,4,1,2,7,5,7]

SelecterSort(n)

3.快速排序(递归)

1.选择第一个元素作为基数

2.比基数小的放左边列表(左列表在次选择基数,进行左右分开)

3.比基数大的放右边列表(右列表再次选择基数,进行左右分开)、

4.直到列表中只有一个数的时候,结束

#def q(arr):
    #递归出口
    if len(arr)<2:
        return arr
    elss:
        #基数
        z = arr[0]
        #左边排序
        l = [x for x in arr[1:] if x < z]
        r = [x for x in arr[1:] if x > z]
        return q(l) + [z] + q(r)

if __name__ == '__main__':
     a = [1, 4, 3, 41, 6]
     aa = q(a)

你可能感兴趣的:(算法,排序算法,数据结构)