码迷,mamicode.com
首页 > 编程语言 > 详细

python 排序算法

时间:2017-10-14 18:21:28      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:logs   技术   bre   返回   code   交换   最大的   UI   blog   

一、冒泡排序

两层for循环,内循环比较当前数与下一位的大小,如小,交换位置。

技术分享
1 def bubble_sort(data):
2     for i in range(len(data)-1):
3         for j in range(len(data)- i -1):
4             if data[j]<data[j + 1]:
5                 data[j], data[j + 1] = data[j + 1], data[j]
View Code

二、插入排序

循环有序数列后的每一位数,如果大于有序数列的最后一位,则两数交换位置,再与有序数列的最后第二位比较,以此类推。

技术分享
1 def insect_sort(data):
2     for i in range(1, len(data)):
3         tmp = data[i]
4         j = i - 1
5         while j<=0 and data[j] > tmp:
6             data[j],data[j + 1] = data[j + 1],data[j]
7             j -= 1
8         data[j + 1] = tmp
View Code

三、选择排序

每次for循环都找出最小的数,作为该次循环的结果

技术分享
1 def select_sort(data):
2     for i in range(len(data)-1):
3         min_num = i
4         for j in range(i+1, len(data)):
5             if data[j]<data[i]:
6                 min_num = j
7             data[i], data[min_num] = data[min_num], data[i]
View Code

四、快排

选第一个数,从左开始循环比较,如小于,停止循环,将小的数放至第一个数位置,从右开始循环,如大于,停止循环,将大的数放到上次循环空位上,如此循环直到left = right,返回mid,进行递归

技术分享
 1 def quick_sort(data,left,right):
 2     if left<right:
 3         mid = partition(data,left,right):
 4         quick_sort(data,left,mid-1)
 5         quick_sort(data,mid+1,right)
 6 
 7 def partition(data,left,right):
 8     tmp = data[left]
 9     while left < right:
10         while left < right and data[right]>=tmp:
11             right -= 1
12         data[left] = data[right]
13         while left < right and data[left]<=tmp:
14             left += 1
15         data[right] = data [left]
16     data[left] = tmp
17     return left
View Code

五、堆排序

先从最小的有子节点的父节点开始循环调整建堆,然后取数,将堆末与堆顶换位,再进行一次除开已换下位的堆顶的调整,如此循环。

技术分享
 1 def sift(data,low,high):
 2     i = low
 3     j = 2*i + 1
 4     tmp = data[i]
 5     while j <= high:  # 只要没到最后根最后
 6         if j < high and data[j] < data[j + 1]:  # 是否有右孩子,且右孩子大于左孩子
 7             j = j + 1  # j 成为最大孩子的下标
 8         if tmp < data[j]:  # 最大的孩子是否大于父亲
 9             data[i] = data[j]  # 子孩子上位
10             i = j  # 重新赋值下标
11             j = 2*i + 1
12         else:  # 上述条件都不满足,跳出循环
13             break
14     data[i] = tmp
15 
16 def heap_sort(data):
17     n = len(data)
18     for i in range(n // 2 -1 ,-1,-1):
19         sift(data,i,n-1)
20     for i in range(n-1,-1,-1):
21         data[0],data[i] = data[i],data[0]
22         sift(data,0,i-1)
View Code

 

python 排序算法

标签:logs   技术   bre   返回   code   交换   最大的   UI   blog   

原文地址:http://www.cnblogs.com/xu-xiaofeng/p/7667621.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!