肇东网站建设,酒店可以采用的网络营销方式,上海中心,网站备案每年一次吗一、归并
li[2,4,5,7,//1,3,6,8]#归并的前提是必须两部分排好序
def merge(li,low,mid,high):ilowjmid1ltmp[]while imid and jhigh: #只要左右两边都有数if li[i]li[j]:ltmp.append(li[i])i1else:ltmp.append(li[j])j1#while执行完#xff0c;肯定有一部分没数…一、归并
li[2,4,5,7,//1,3,6,8]#归并的前提是必须两部分排好序
def merge(li,low,mid,high):ilowjmid1ltmp[]while imid and jhigh: #只要左右两边都有数if li[i]li[j]:ltmp.append(li[i])i1else:ltmp.append(li[j])j1#while执行完肯定有一部分没数了while imid:ltmp.append(li[i])i1while jhigh:ltmp.append(li[j])j1li[low:high1]ltmpli[2,4,5,7,1,3,6,8]
merge(li,0,3,7)
print(li)二、归并排序 1.分解:将列表越分越小直至分成一个元素。 2.终止条件:一个元素是有序的。 3.合并:将两个有序列表归并列表越来越大。 def merge(li,low,mid,high):ilowjmid1ltmp[]while imid and jhigh: #只要左右两边都有数if li[i]li[j]:ltmp.append(li[i])i1else:ltmp.append(li[j])j1#while执行完肯定有一部分没数了while imid:ltmp.append(li[i])i1while jhigh:ltmp.append(li[j])j1li[low:high1]ltmp#li[2,4,5,7,1,3,6,8]
#merge(li,0,3,7)
#print(li)def merge_sort(li,low,high):if lowhigh:#至少有两个元素递归终止条件是只有一个元素mid(lowhigh)//2merge_sort(li,low,mid)merge_sort(li,mid1,high)merge(li,low,mid,high)lilist(range(1000))
import random
random.shuffle(li)
print(li)
merge_sort(li,0,len(li)-1)
print(li)时间复杂度O(nlogn)logn层每一层为n 空间复杂度O(n)
归并、快速、堆排序
1.三种排序算法的时间复杂度都是0(nlogn) 2.一般情况下就运行时间而言: 快速排序归并排序堆排序. 3.三种排序算法的缺点: 快速排序:极端情况下排序效率低 归并排序:需要额外的内存开销 堆排序:在快的排序算法中相对较慢 隔着换不稳定