常用的排序算法
创始人
2024-03-02 17:55:23
0

常用的排序算法

  1. 快速排序

    思路:以数组中的第一个元素作为基准,对数组进行调整,使得左边的元素都小于基本,右边的元素都大于等于基准;然后再分别对左右两边的数组进行如上方法的排序

    import numpy
    def partition(nums, l, r):t = nums[l]start = ll+=1while l <= r:while l<=r and nums[l] <= t:l += 1while l<=r and nums[r] >= t:r -= 1if l > r:breaknums[l], nums[r] = nums[r], nums[l]nums[start], nums[r] = nums[r], nums[start]return rdef quick_sort(nums, l, r):if l < r:parti_index = partition(nums, l, r)quick_sort(nums, l, parti_index - 1)quick_sort(nums, parti_index + 1, r)return numsif __name__ == '__main__':nums = numpy.random.randint(0, 20, 8)nums = list(nums)l = 0r = len(nums)-1nums_sort = quick_sort(nums, l, r)print(nums_sort)
    
  2. 归并排序

    思路:首先将数组拆分成单个元素,然后取一对元素进行合并,直到所有的元素都合并后,得到的就是排序后的结果

    def merge(arr1, arr2):i, j = 0, 0res = []while i
  3. 堆排序

    思路:首先建堆,将数组看作是二叉树,然后自底向上进行调整,使得根节点的值大于等于左右子树的值,最终二叉树的根是最大值;

    然后,将根节点从数组中移出,重新调整剩余数组的堆,每次调整后,堆顶元素就是当前数组的最大值。

    也就是说,建成堆之后,不断对堆顶进行调整,每次获取当前的最大值

    def heapify(arr, i, n):largest = ileft = 2*i+1right = 2*i+2if leftarr[largest]:largest = leftif rightarr[largest]:largest = rightif largest!=i:arr[largest],arr[i] = arr[i],arr[largest]heapify(arr, largest, n)def heap_sort(arr):n = len(arr)for i in range(n-1, -1,-1):heapify(arr,i,n)for j in range(n-1, 0, -1):arr[0], arr[j] = arr[j], arr[0]heapify(arr, 0, j)return arrimport numpy
    arr = numpy.random.randint(0,20,8)
    arr = list(arr)
    # arr = [3,6,2,4,7]
    print(arr)
    arr_sort = heap_sort(arr)
    print(arr_sort)
    
#快速排序衍生题目
def partition(arr, l, r):index = lp = arr[index]l +=1while(l<=r ):while(l<=r and arr[l]<=p):l+=1while(l<=r and arr[r]>=p):r-=1if(l>r):breakarr[l], arr[r] = arr[r], arr[l]arr[index], arr[r] = arr[r], arr[index]return r"""
最数组进行快速排序
"""
def quick_sort(arr, l, r):if(lk):r = m-1"""
求最小的K个数
"""
def cal_small_k_nums(arr, l, r, k):if(k>=len(arr)):return arrwhile(l<=r):m = partition(arr, l, r)if(m==k):return arr[0:k]elif(m>k):r = m-1elif(m

相关内容

热门资讯

清朝有很多有名的历史人物,能给... 清朝有很多有名的历史人物,能给大家说几个清朝的历史人物吗?林则徐,张之洞,乾隆皇帝,曾国藩,朱耷,这...
曹丕的“太子四友”指的是谁 曹丕的“太子四友”指的是谁首先说,曹丕这四个,陈群司马懿是顶级的谋士和政治家,吴质有些小聪明,朱铄不...
在这次遇难者中存在了几名幸存者... 在这次遇难者中存在了几名幸存者。这句话是不是逻辑错误这句话的逻辑没有问题,有问题的是用词不当。遇难者...
在中国古代,有许多充满哲学智慧... 在中国古代,有许多充满哲学智慧的成语典故、寓言故事,如...在中国古代,有许多充满哲学智慧的成语典故...
清澈的意思是什么,… 清澈的意思是什么,…清净而明澈清而透明【造句】看着他清澈而又天真的眼眸,我的心久久不能平静……
蚂蚁森林合种爱情树一方退出怎么... 蚂蚁森林合种爱情树一方退出怎么找回来两个人合种的爱情树,我退出来,我怎么再次加入进去继续合作那个树?...
有好看的古代修炼小说推荐吗? 有好看的古代修炼小说推荐吗?古代重生穿越修炼......让我帮你找一下这些古代修炼的小说,找到这些类...
女主重生爱上前世辜负的人 女主重生爱上前世辜负的人重生我是你正妻渣女重生之竹马重生之弃渣重生之夫君可欺重生之换我疼你重生妇归来...
华胥引有广播剧吗 华胥引有广播剧吗现有的华胥引的广播剧是忆语广播剧社出品的,只有十三月和杯(这个是错字,请无视,居然输...
选文韩麦尔先生在说了,我的朋友... 选文韩麦尔先生在说了,我的朋友们我就要离开你们呢了,再见了银头鲑鱼tj75rt6yturdrruv ...
中通快递从北京保定市到广东揭阳... 中通快递从北京保定市到广东揭阳普宁要多久?中通快递从北京保定市到广东揭阳普宁要多久?从北京到广东需要...
关于离婚悲伤的歌曲 关于离婚悲伤的歌曲关于离婚悲伤的歌曲林俊杰《可惜没如果》 张靓颖《我走以后》 金志文《流着泪说分手》...
形容文笔差怎么说啊? 形容文笔差怎么说啊?哥哥姐姐,麻烦问下,我是做文员的,形容文案方面的工作很差应该怎么说啊?粗鄙怎么样...
我想做未婚妈妈,可行吗? 我想做未婚妈妈,可行吗?没关系吧?我同学好多他们妈妈都是30岁以后省得他们,都没事啊,但是如果你自己...
如何在两个excel表格里筛选... 如何在两个excel表格里筛选出重复的名字如何在两个excel表格里筛选出重复的名字1、电脑打开EX...
且试天下 哪些小说是用白绫做武... 且试天下 哪些小说是用白绫做武器的?神雕侠侣吖- -..小龙女一开始就是用白绫的聊斋 辛十四娘嘿嘿~...
自带高冷体质,笑起来温暖又治愈... 自带高冷体质,笑起来温暖又治愈的星座,你了解吗?虽然天生高冷体质,但是笑起来特别的温暖治愈的新作用天...
火星未解之谜 火星未解之谜多列举一些,每个事例最好长一点,谢啦~“火星人脸”, “地表被水冲击河道”,“原始大气和...
我是1991年10月4号生的,... 我是1991年10月4号生的,是什么星座啊有的说是处女座有的说是天平座,糊涂了,到底是什么啊很负责任...
梦见白狐狸,然后当时我骑着自行... 梦见白狐狸,然后当时我骑着自行车,我想躲开它,他很凶的的追赶我,最后它向我扑了过来,然后我就醒乐.你...