1.冒泡排序
原理:依次比较相邻两个元素的值,不符合条件就交换,每执行完一趟会将最大值(或最小值)放到最右面(相对最右面)。具体百度。
def maopao(a):
for i in range(len(a)-1,-1,-1): #len得到a的长度,此处为9,但下标从0开始最多为8,所以-1
for j in range(0,i): #第二个-1,代表到0结束,range的用法;第三个-1,代表依次-1
if (a[j+1]<a[j]):
k = a[j+1]
a[j+1] = a[j]
a[j] = k
return a
a = [5,3,7,6,4,10,2,9,8]
print(maopao(a))
结果:[2, 3, 4, 5, 6, 7, 8, 9, 10]
解析:外循环是从大到小的,例如:开始i=8,经过一次完整内循环后,整个序列最大值会在a[8]的位置,此a[8]的值就为10,不会再改变了,以后的操作不会对a[8]进行;然后i-1=7,经过内循环后,得到整个序列第二大的值 a[7]=9;依次重复上述步骤,直到i=0,循环结束。
2.快速排序
仿c++写
def quicks(a,l,r):
if l>=r:
return
i = l
j = r
k = a[l]
while(i<j):
while(i<j and a[j]>=k):
j = j-1
a[i] = a[j]
while(i<j and a[i]<=k):
i = i+1
a[j] = a[i]
a[i] = k
quicks(a,l,i-1)
quicks(a,i+1,r)
def mainj():
a = [8,5,7,6,4,10,8,9,8]
quicks(a,0,8)
for x in range(0,9):
print(a[x])
mainj()
真正运用Python特性(抄作业):
def quick_sort(data):
if len(data) >= 2: # 递归入口及出口
mid = data[len(data) // 2] # 选取基准值,也可以选取第一个或最后一个元素 “//”取整
left, right = [], [] # 定义基准值左右两侧的列表
data.remove(mid) # 从原始数组中移除基准值
for num in data:
if num >= mid:
right.append(num)
else:
left.append(num)
return quick_sort(left) + [mid] + quick_sort(right)
else:
return data
# 示例:
array = [2, 3, 5, 7, 1, 4, 6, 15, 5, 2, 7, 9, 10, 15, 9, 17, 12]
print(quick_sort(array))
待完成...