python排序算法

(一)插入排序

每次循环之前,前面i位总是有序的。

1 def insert_sort(list):
2     for i in range(len(list)):
3         key = list[i]
4         for j in range(i-1,-1,-1):
5             if key < list[j]:
6                 list[j+1] = list[j]
7                 list[j] = key
8     return list
9 print insert_sort([5,4,3,2,1])

(二)冒泡排序

每次循环,跟无序子list的首位比,每次循环有一个最值沉到/浮到这个首位

def bubble_sort(list):
    for i in range(len(list)):
        for j in range(i+1,len(list)):
            if list[i] > list[j]:
                list[j],list[i] = list[i],list[j]
  return list

(三)快速排序

每次抽第一个数为flag,然后调整成左边比他小,右边比他大,随后递归

def part_sort(list,start,end):    if start >= end-1:        return    flag = list[start]    i = start    for j in range(start+1,end):        if list[j] < flag:            i += 1            if list[i] != list[j]:                list[i],list[j] = list[j],list[i]        else:            pass    list[i],list[start] = list[start],list[i]    return idef quick_sort(list,start,end):    if start>=end-1:        return    flag_index = part_sort(list,start,end)    quick_sort(list,start,flag_index)    quick_sort(list,flag_index+1,end)    return list

(四) 堆排序

def fixDown(a,k,n): #自顶向下堆化,从k开始堆化
    N=n-1
    while 2*k<=N:
        j=2*k
        if j<N and a[j]<a[j+1]: #选出左右孩子节点中更大的那个
            j+=1
        if a[k]<a[j]:
            a[k],a[j]=a[j],a[k]
            k=j
        else:
            break  

def heapSort(l):
    n=len(l)-1
    for i in range(n//2,0,-1):
        fixDown(l,i,len(l))
    while n>1:
        l[1],l[n]=l[n],l[1]
        fixDown(l,1,n)
        n-=1
    return l[1:]  

l=[-1,26,5,77,1,61,11,59,15,48,19] #第一个元素不用,占位
res=heapSort(l)
print(res)
时间: 2024-10-20 20:59:18

python排序算法的相关文章

python排序算法实现(冒泡、选择、插入)

python排序算法实现(冒泡.选择.插入) python 从小到大排序 1.冒泡排序: O(n2) s=[3,4,2,5,1,9] #count = 0 for i in range(len(s)): for j in range((i+1),len(s)): s[i],s[j]=min(s[i],s[j]),max(s[i],s[j]) #print count print s 2.选择排序: O(n2) s=[3,4,2,5,1,9] #count = 0 for i in range(l

python排序算法之冒泡,选择,插入

1.参考 一本关于排序算法的 GitBook 在线书籍 <十大经典排序算法>,使用 JavaScript & Python & Go 实现 2.冒泡排序:两两比较,互换位置 arr = [9,8,2,23,3] # 冒泡排序 两两比较,互换位置 # 3 5 9 1 8 # A B C D E # 3 5 9 1 8 # 3 5 9 1 8 # 3 5 1 9 8 # 3 5 1 8 9 # 第一轮比较将最大数排到最后,5个数总共需要4轮即1,2,3,4 # 比较是arr[j]

Python排序算法之直接插入排序

插入排序的主要思想是每次取一个列表元素与列表中已经排序好的列表段进行比较,然后插入从而得到新的排序好的列表段,最终获得排序好的列表. 比如,待排序列表为[49,38,65,97,76,13,27,49],则比较的步骤和得到的新列表如下: (带有背景颜色的列表段是已经排序好的,红色背景标记的是执行插入并且进行过交换的元素) 时间复杂度:O(n^2) 待排序:  [49,38,65,97,76,13,27,49] 第一次比较后:  [38,49,65,97,76,13,27,49]     第二个元

Python排序算法之快速排序

转自:https://www.cnblogs.com/AlwinXu/p/5424905.html 快速排序(quickSort) 快排的思想:首先任意选取一个数据(通常选用数组的第一个数)作为关键数据,然后将所有比它小的数都放到它前面,所有比它大的数都放到它后面,这个过程称为一趟快速排序. 百度百科给的算法: 一趟快速排序的算法是: 1)设置两个变量i.j,排序开始的时候:i=0,j=N-1: 2)以第一个数组元素作为关键数据,赋值给key,即key=A[0]: 3)从j开始向前搜索,即由后开

Python排序算法动态图形化演示(实现代码)

  1.冒泡排序 冒泡排序是最简单也是最容易理解的排序方法,其原理就是重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成. 1 # 冒泡排序 2 def bubbleSort(li): 3 n = len(li) 4 for i in range(n-1): 5 for j in range(n-i-1): 6 if li[j] > li[j+1]: 7 li[j],li[j+1] = li[j

python 排序算法

1.冒泡法(直接交换元素) 1 def bubble_sort(a_list): 2 a_len = len(a_list)-1 3 while a_len > 0: 4 for i in range(a_len): 5 if a_list[i] >a_list[i+1]: 6 a_list[i],a_list[i+1] = a_list[i+1],a_list[i] 7 8 a_len -=1 9 10 if __name__ == '__main__': 11 a_list=[20,40,

Python排序算法之选择排序

选择排序 选择排序比较好理解,好像是在一堆大小不一的球中进行选择(以从小到大,先选最小球为例): 1. 选择一个基准球 2. 将基准球和余下的球进行一一比较,如果比基准球小,则进行交换 3. 第一轮过后获得最小的球 4. 在挑一个基准球,执行相同的动作得到次小的球 5. 继续执行4,直到排序好 时间复杂度:O(n^2).  需要进行的比较次数为第一轮 n-1,n-2....1, 总的比较次数为 n*(n-1)/2 直接上代码: def selectedSort(myList): #获取list的

Python排序算法之冒泡排序

冒泡排序 顾名思义,冒泡排序直观的意思是气泡越大冒的越快:),对应到我们的列表中就是数字最大的先选出来,然后依次进行.例如 myList = [1,4,5,0,6],比较方式为: 相邻的两个数字先进行比较,也就是myList[0]和myList[1],发现不是">"的关系,就继续比较myList[1]和myList[2]...依次进行,发现myList[2]>myList[3](及5>0),就进行交换,所以走完第一次全列表比较得到新列表[1,4,0,5,6],然后每一

Python实现各种排序算法的代码示例总结

Python实现各种排序算法的代码示例总结 作者:Donald Knuth 字体:[增加 减小] 类型:转载 时间:2015-12-11我要评论 这篇文章主要介绍了Python实现各种排序算法的代码示例总结,其实Python是非常好的算法入门学习时的配套高级语言,需要的朋友可以参考下 在Python实践中,我们往往遇到排序问题,比如在对搜索结果打分的排序(没有排序就没有Google等搜索引擎的存在),当然,这样的例子数不胜数.<数据结构>也会花大量篇幅讲解排序.之前一段时间,由于需要,我复习了