• python 实现插入排序、冒泡排序、归并排序


      1 def InsertSort(A):
      2 	'''插入排序算法:传入一个list,对list中的数字进行排序'''
      3 	print('插入排序前list元素顺序:',A)
      4 	length=len(A)
      5 	for i  in range(1,length):#从第二个开始
      6 		key=A[i]
      7 		j=i-1
      8 		while j>=0 and A[j]>key:
      9 			A[j+1]=A[j]
     10 			j=j-1
     11 		A[j+1]=key
     12 	print('插入排序后的list元素顺序:',A)
     13 	#插入排序时间复杂度:n^2,空间复杂度:1,相同元素保持相对不变性(相对位置不变)
     14 
     15 def BableSort(A):
     16     '''冒泡排序算法:传入一个List,对list中的元素进行排序'''
     17     print('冒泡排序前的顺序:',A)
     18     length=len(A)
     19     for i in range(1,length):
     20         #rang=range(i)
     21         #for j in reversed(rang):
     22         for j in range(i,0,-1): #range逆序遍历
     23             if A[j-1]> A[j]:
     24                 temp=A[j]
     25                 A[j]=A[j-1]
     26                 A[j-1]=temp
     27 
     28     print('冒泡排序后的顺序:',A)
     29     # 冒泡排序时间复杂度为:n^2,空间复杂度1,相同元素保持相对不变性
     30 
     31 # 归并排序,传入一个list,对list元素进行排序
     32 def MergeSort(alist):
     33     print("Splitting ",alist)
     34     if len(alist)>1:
     35         mid = len(alist)//2#精确除法,取小于等于结果的最大整数,相当于对结果进行向下取整
     36         lefthalf = alist[:mid]
     37         righthalf = alist[mid:]
     38 
     39         MergeSort(lefthalf)#递归调用左半部分
     40         MergeSort(righthalf)#递归调用右半部分
     41 
     42         #合并过程
     43         i=0
     44         j=0
     45         k=0
     46         while i < len(lefthalf) and j < len(righthalf):
     47             if lefthalf[i] < righthalf[j]:
     48                 alist[k]=lefthalf[i]
     49                 i=i+1
     50             else:
     51                 alist[k]=righthalf[j]
     52                 j=j+1
     53             k=k+1
     54 
     55         while i < len(lefthalf):
     56             alist[k]=lefthalf[i]
     57             i=i+1
     58             k=k+1
     59 
     60         while j < len(righthalf):
     61             alist[k]=righthalf[j]
     62             j=j+1
     63             k=k+1
     64     print("Merging ",alist)
     65     # 归并排序算法时间复杂度:n*lgn,空间复杂度:n,相同元素保持顺序不变性
     66 
     67 
     68 if __name__=='__main__':
     69     listA=[1,5,7,3,4,6,7,8,9,9,15,10,4]
     70     alist = [54,26,93,17,77,31,44,55,20]
     71     #InsertSort(listA)
     72     #BableSort(listA)
     73     MergeSort(alist)

    mergesortA       mergesortB

    参考:http://interactivepython.org/courselib/static/pythonds/SortSearch/TheMergeSort.html

  • 相关阅读:
    Node.js——fs常用API
    Node.js——Stream
    Node.js——Buffer
    Node.js——post方式提交的图片如何保存
    CSS——BFC
    Node.js——body方式提交数据
    Node.js——基本服务开启
    Node.js——url模块
    Node.js——render封装
    Node.js——开放静态资源原生写法
  • 原文地址:https://www.cnblogs.com/jean925/p/9180747.html
Copyright © 2020-2023  润新知