排序算法
排序动画可点击该处
- 快速排序
- 插入排序
- 选择排序
- 冒泡排序
- 归并排序
- 堆排序
- 基数排序
- 希尔排序
1、快速排序(交换)
排序思想:
1、取一个基准数
2、比这个数大的全放到它右边,小于或等于它的数全放到它左边
3、左右区间重复第二步,直到各区间只有一个数
def quik_sort(value, start, stop):
if start >= stop:
return
mid = value[start]
low = start
hight = stop
while low < hight:
while low < hight and value[hight] > mid:
hight -= 1
value[low] = value[hight]
while low < hight and value[low] < mid:
low += 1
value[low] = value[hight]
value[low] = mid
quik_sort(value, start, low-1)
quik_sort(value, hight+1, stop)
return value
print '快排结果:', quik_sort([4, 1, 55, 18, 10], 0, 4)
2、冒泡排序(交换)
排序思想:
1、比较相邻的元素,如果第一个比第二个大,交换位置,大的元素放在最后。
2、针对所有的元素重复以上的步骤,最后一个除外。
3、持续每次对越来越少的元素重复上面的步骤,直到,没有任何一对数字需要比较。
基本思路:依次比较相邻的两个数
序列:[7,2,3,9]
排序方式:小--大
序列长度:4
第一次比较序列索引:0,1,2,3
第二次比较序列索引:0,1,2
第三次比较序列索引:0,1
def bubble_sort(value):
# 参数3 step 步长, 默认为1
for i in range(len(value) - 1, 0, -1):
for y in range(0, i):
if value[y] > value[y + 1]:
value[y], value[y + 1] = value[y + 1], value[y]
return value
result = bubble_sort([10, 1, 3, 4, 2, 5, 8, 100, 20, 25])
print result
3、插入排序(插入)
排序思想:
通过构建有序序列,对于未排序的数据,在已排序序列中从后向前进行扫描,找到相应位置并插入。插入排序,在实现上,在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。
基本思路:比较前两个,然后前三个。。。以此类推后边的往前插入到排过的序列。
序列:[7,2,3,9]
排序方式:小--大
序列长度:4
第一次比较序列索引: 1,0
第二次比较序列索引: 2,1,0
第三次比较序列索引:3,2,1,0
def insert_sort(value):
for x in range(1, len(value)):
for y in range(x, 0, -1):
if value[y] < value[y-1]:
value[y], value[y-1] = value[y-1], value[y]
return value
print insert_sort([4, 2, 6, 1, 9])
4、希尔排序(插入)
排序思想:
这里写代码片
5、选择排序(选择)
排序思想:
1、从后往前,依次和首位比较,如果小于首位数字,交换两个数字位置
2、从后往前,依次和第二位比较,如果小于第二位数字,交换两个数字位置
3、依次类推,每一轮都是和同一个数比较
序列:[7,2,3,9]
排序方式:小--大
序列长度:4
第一次比较序列索引:3,2,1,0
第二次比较序列索引:3,2,1
第三次比较序列索引:3,2
def choosesort(li):
for i in range(0,len(li)):
for j in range(len(li)-1,i,-1):
if li[j] < li[i]:
li[j], li[i] = li[i], li[j]
return li
print choosesort([54,26,93,17,77,31,44,55,20])
6、堆排序(选择)
排序思想:
这里写代码片
7、归并排序
排序思想:
这里写代码片
8、基数排序
排序思想:
这里写代码片