python2.7
快速排序的思想:首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序。
一趟快速排序的算法是:
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-完成的时候,此时令循环结束)。
冒泡,插入,选择,快速排序方法:
#coding:utf-8
"""
冒泡排序法n个数两两比较n-1轮
每一轮比较n-1-i次
"""
def maopao(a):
for i in range(len(a)-1):
for j in range(len(a)-1-i):
k = 0
if a[j] > a[j+1]:
k = a[j]
a[j] = a[j+1]
a[j+1] = k
return a
print('maopao------',maopao([9,8,7,6,5,4,3,2,1]))
"""
选择排序法比较n个位置,
每个位置i处和剩余位置元素比较
"""
def xuanze(a):
for i in range(len(a)):
index = i
min_value = a[i]
#找出最小值的位置和值和第一个位置的元素替换
for j in range(i,len(a)):
if a[j] < min_value:
min_value = a[j]
index = j
if index != i:
a[index] = a[i]
a[i] = min_value
return a
print('xuanze------',xuanze([9,8,7,6,5,4,3,2,1]))
"""
插入排序法插入n-1次
每次插入和前面的数比较
"""
def charu(a):
for i in range(1,len(a)):
insert_value = a[i]
j = i-1
#将插入的值依次和左边的元素比较
while j >=0:
if insert_value < a[j]:
a[j+1] = a[j]
a[j] = insert_value
j -= 1
return a
print('charu------',charu([9,8,7,6,5,4,3,2,1]))
"""
快速排序法
"""
def kuaisu(a,left,right):
key_value = a[left]
while left < right:
while left< right and a[right] >= key_value:
right -= 1
a[left] = a[right]
while left<right and a[left] <= key_value:
left += 1
a[right] = a[left]
a[left] = key_value
return left
def sort(a,left,right):
if left <= right:
middle_index = kuaisu(a,left,right)
sort(a,left,middle_index-1)
sort(a,middle_index+1,right)
return a
print('kuaisu ------',sort([9,8,7,6,5,4,3,2,1],0,8))
快速排序法(易懂版)
def kuaisu_sort(a):
low = []
median = []
high = []
if len(a) <= 1:
return a
else:
#设置一个基准baseline
baseline = a[0]
for i in a:
if i < baseline:
low.append(i)
elif i > baseline:
high.append(i)
else:
median.append(i)
low_arr = kuaisu_sort(low)
high_arr = kuaisu_sort(high)
return low_arr+median+high_arr
print(kuaisu_sort([9,8,7,6,5,4,3,2,1]))