Python排序算法

冒泡排序

冒泡排序算法的原理如下:

  • 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
  • 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
  • 针对所有的元素重复以上的步骤,除了最后一个。
  • 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
def bubblesort(numbers):

for j in range(len(numbers)-1,0,-1): #外部循环次数:元素数量-1(start,end,间隔)

for i in range(j): #轮次下两个元素相互比较

if numbers[i]>numbers[i+1]:

numbers[i],numbers[i+1] = numbers[i+1],numbers[i]

print("i=%r j=%r" %(i,j))

print(numbers)


numbers = [7,8,6,5,3]
bubblesort(numbers)

快速排序

排序原理:
以一个数作为基准数,然后从右往左选出比基数小的,从左往右选出比基准数大的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
def quickSort(num,l,r):				#num 表示排序数组 l表示下标起始值 r表示数据个数
if l>=r: #如果只有一个数字时,结束递归
return
flag=l
for i in range(l+1,r+1): #默认以第一个数字作为基准数,从第二个数开始比较,生成索引时要注意右部的值
if num[flag]>num[i]:
tmp=num[i]
del num[i]
num.insert(flag,tmp)
flag+=1
quickSort(num,l,flag-1) #将基准数前后部分分别递归排序
quickSort(num,flag+1,r)

num=[1,-2,4,7,6,3,2,3]
quickSort(num,0,7)
print(num)