首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏C++打怪之路

    排序3: 堆排序

    上期回顾:我们讲了希尔排序的实现方式。 这一期,我们来剖析一下堆排序的底层思路以及代码实现。 ---- 目录 堆排序的基本思想 向下调整 选数 总结 ---- 堆排序的基本思想 关于堆排序,我们首先考虑的当然是建堆了。 堆,是二叉树的一种。 我们以从小到大排序为例,我们建堆时建大堆,然后每次把尾部的数和堆顶的最大的数字交换,那么我们就把最大的数字放到了它改在的地方。 3、加上循环。 堆是二叉树的一种,利用二叉树的调整法建成的堆只是具有相对有序的,向下调整的时候还是可能破坏原先的排序,所以是不稳定的。

    37520编辑于 2023-03-31
  • 来自专栏c语言

    排序3

    归并排序 void _MergeSort(int* a, int* tmp, int begin, int end) { if (end <= begin) { return; } int { perror("malloc fail"); return; } _MergeSort(a, tmp, 0, n - 1); free(tmp); tmp = NULL; } 归并排序非递归实现 sizeof(int) * (end2 - i + 1)); } printf("\n"); gap *= 2; } free(tmp); tmp = NULL; } 计数排序 // 计数排序 void CountSort(int* a, int n) { int min = a[0]; int max = a[0]; for (int i = 0; i < n; i+

    16300编辑于 2025-01-14
  • 来自专栏一英里广度一英寸深度的学习

    线性排序算法-归并排序3

    归并排序的主要技巧,如何处理两个分别已经排好序的数组? 采用归并,生成排好序的(2) (2,2)采用归并,生成拍好序的(4) (4,4)-->(8) (8,8)-->16 def __Merge(self,a,l,mid,r): #排序对象 ) i = i+sz+sz sz = sz+sz 递归调用 def __MergeSort(self,a,l,r): #排序对象 a[l,r) if (l+1) >= r: return """ ## 在小数组情况下,用插入排序

    36020发布于 2018-09-12
  • 来自专栏分享/效率/工具/软件

    (3)交换排序之快速排序

    本文链接:https://blog.csdn.net/qq_37933685/article/details/88681552 title: (3)交换排序之快速排序 date: 2019-03- 0800 author: me cover: http://ww1.sinaimg.cn/large/006jIRTegy1g17bc4qzxuj31kw11xne5.jpg preview: 快速排序是一个知名度极高的排序算法 ,对大数据的优秀排序性能和相同复杂度算法中相对简单的实现 tags: 算法 ---- 文章目录 (3)交换排序之快速排序 算法演示图 代码实现 我的主页 ? (3)交换排序之快速排序 算法演示图 ? qsort(arr, pivot+1, high); //递归排序右子数组 } } private static int partition(

    52730发布于 2019-09-17
  • 来自专栏余林丰

    3.比较排序之堆排序

      对于堆排序会涉及一些完全二叉树知识。对于待排序列{10, 2, 11, 8, 7},把它看成是一颗完全二叉树,如下图所示。    排序过程不再给出,Java和Python3的代码实现如下。 Java 1 package com.algorithm.sort.heap; 2 3 import java.util.Arrays; 4 5 /** 6 * 堆排序 7 * Created childIndex = 2 * parent + 1; //继续向下调整 56 } 57 nums[parent] = temp; 58 } 59 } Python3 1 #堆排序 2 def heap_sort(nums): 3 4 for i in range(int(len(nums) / 2 - 1), -1, -1): 5

    81480发布于 2018-01-12
  • 来自专栏编程乐园·

    排序3】选择排序:高效的排序算法之美

    选择排序 选择排序的基本思想: 每一趟(第i趟)在后面n-i+1(i=1,2,···,n-1)个待排序元素中 选取关键字最小的元素,作为有序子序列的第i个元素,直到n—1趟做完,待排序元素只剩下一个 1、直接选择排序 直接选择排序是一种简单直观的排序算法。 它的基本思想是每次从未排序的部分中找到最小(或最大)的元素,将其与未排序部分的第一个元素交换位置,然后缩小未排序部分的范围,继续进行选择和交换,直到整个序列有序。 具体步骤】: 1、在元素集合array[i]–array[n-1]中选择关键码最大(小)的数据元素 2、若它不是这组元素中的最后一个(第一个)元素,则将它与这组元素中的最后一个(第一个)元素交换 3、 实际中很少使用 时间复杂度:O(N^2) 空间复杂度:O(1) 稳定性:不稳定 2、堆排序排序(Heapsort)是指利用堆积树(堆)这种数据结构所设计的一种排序算法,它是选择排序的一种。

    38710编辑于 2024-01-30
  • 来自专栏网优小兵玩Python

    【Python 3 冒泡排序

    算法讲解 冒泡排序是一种简单直观的排序算法(算法简单,效率低)。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。 走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。 算法代码实现 Python 3 代码实现如下,随机生成20个数,保存到列表变量list1中,通过冒泡排序法进行排序,然后输出排序结果: from random import randrange import ): list1 = [] while len(list1) < 20: # 范围内随机取20个数值 list1.append(randrange(0, 1000, 3) ) print('排序前数组:',list1,'\n') # 通过两个for循环实现冒泡排序算法,内循环一次实现找出一个最大值 for i in range(20):

    71920发布于 2019-09-17
  • 来自专栏python3

    python3-排序

    排序 >>> z=[11,34,-12,9,8534,12,434] >>> z.sort() >>> z [-12, 9, 11, 12, 34, 434, 8534] sort() 函数用于对原列表进行排序 key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。 reverse -- 排序规则,reverse = True 降序, reverse = False 升序(默认)。 ,reverse=True) >>> z [(3, '1234asf'), (1, 'adsfafd'), (2, 'qwer'), (4, 'ew')] 多属性排序 >>> z=[(1,"adsfafd , (4, 1), (1, 3)] # 指定第二个元素排序 random.sort(key=takeSecond) # 输出类别 print ('排序列表:', random)

    45010发布于 2020-01-03
  • 来自专栏网优小兵玩Python

    【Python 3 选择排序

    算法讲解 选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。 算法代码实现 Python 3 代码实现如下,随机生成20个数,保存到列表变量list1中,通过选择排序法进行排序,然后输出排序结果: from random import randrange import ): list1 = [] while len(list1) < 20: # 范围内随机取20个数值 list1.append(randrange(0, 1000, 3) () #调用排序函数 Sele_sort() end = datetime.datetime.now() print ('选择排序运行所用时间:',end-start) 代码运行结果如下: ?

    59410发布于 2019-09-17
  • 来自专栏明志德到的IT笔记

    C#排序算法3:插入排序

    插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。 原理:   ⒈ 从第一个元素开始,该元素可以认为已经被排序   ⒉ 取出下一个元素,在已经排序的元素序列中从后向前扫描   ⒊ 如果该元素(已排序)大于新元素,将该元素移到下一位置   ⒋ 重复步骤3 :{ShowArray(arr2)}"); //var arr3 = SelectSort(arr1); //Console.WriteLine($"选择排序 arr3:{ShowArray(arr3)}"); //var val = arr3[3]; var arr4= InsertSort(arr1); //var val2 = arr3[4]; //var index2 = BinarySearch2(arr3, val2); //Console.WriteLine

    37510编辑于 2023-10-21
  • 来自专栏小小码农一个。

    Python3 基本排序算法 之 冒泡排序,插入排序,选择排序

    冒泡排序 相邻的两个元素对比,大的数后推,遍历整个列表一次后,将最大项以冒泡的方式排列i到列表末尾。 简易版冒泡排序示例如下 def bubble(sl): """ 冒泡排序,O(n^2) 相邻的两个元素对比,大的后推,遍历整个列表一次后,将最大项以冒泡的方式排列到列表末尾 (sl)): if sl[i] > sl[j]: sl[i], sl[j] = sl[j], sl[i] return sl 优化版冒泡排序示例如下 def bubble_sort(items): """ 冒泡排序, 还是将while循环换为for循环比较习惯 最好 O(n) 最坏 O(n^2) """ 1], items[j] = items[j], items[j - 1] if not has_swap: break return items 插入排序

    53810发布于 2020-06-08
  • 来自专栏python3

    Python3 基本排序算法之冒泡排序

      基本排序算法按时间复杂度分类   O(n^2)   冒泡排序   插入排序   选择排序   Q(n log n)   分而治之   快速排序   归并排序   冒泡排序   相邻的两个元素对比,大的数后推 简易版冒泡排序示例如下   def bubble(sl):   """   冒泡排序,O(n^2)   相邻的两个元素对比,大的后推,遍历整个列表一次后,将最大项以冒泡的方式排列到列表末尾   :param   def bubble_sort(items):   """   冒泡排序, 还是将while循环换为for循环比较习惯   最好 O(n)   最坏 O(n^2)   """   items_len True   items[j - 1], items[j] = items[j], items[j - 1]   if not has_swap:   break   return items   插入排序 def insert_sort_for(items):   """   插入排序,for循环, 中间还是使用while循环容易理解:   比插入的值 大的数挪后,直到不需要挪动为止即为插入的位置。   

    41920发布于 2020-01-03
  • 来自专栏开源优测

    Python3快速排序

    Python3快速排序 概述 快速排序(Quicksort)是对冒泡排序的一种改进。 快速排序由C. A. R. Hoare在1962年提出。 通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。 key的值A[j],将A[j]和A[i]互换 从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]互换 重复第3、4步,直到i=j; (3,4步中,没找到符合条件的值 ,即3中A[j]不小于key,4中A[i]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。

    1.4K60发布于 2018-04-09
  • 来自专栏开源优测

    Python3选择排序

    选择排序 概述 选择排序(Selection sort)是一种简单直观的排序算法。 它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 基本过程 n个记录的文件的直接选择排序可经过n-1趟直接选择排序得到有序结果: 在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。 再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。 以此类推,直到所有元素均排序完毕。 range(0, 10): random_data.append(random.randint(1, 1000)) return random_data # 选择排序

    79460发布于 2018-04-09
  • 来自专栏惊羽-布壳儿

    算法练习(3) - 链表排序

    package top.buukle.buukle.排序类; public class 排序链表 { //给你链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。 // // 进阶: // // // 你可以在 O(n log n) 时间复杂度和常数级空间复杂度下,对链表进行排序吗? // // // // // 示例 1: // // //输入:head = [4,2,1,3] //输出:[1,2,3,4] // // // 示例 2: // // //输入:head = [-1,5,3,4,0 ] //输出:[-1,0,3,4,5] // // // 示例 3: // // //输入:head = [] //输出:[] // // // // // 提示: // // // 链表中节点的数目在范围 [0, 5 * 104] 内 // -105 <= Node.val <= 105 // // Related Topics 排序 链表 // 1179 0 //leetcode submit

    32310编辑于 2022-06-15
  • 来自专栏开源优测

    Python3冒泡排序

    Python3冒泡排序 概述 冒泡排序(Bubble Sort),是一种计算机科学领域的较简单的排序算法。 它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。 走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。 算法原理 冒泡排序算法的运作如下: 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 i in range(0, 10): random_data.append(random.randint(1, 1000)) return random_data # 冒泡排序 积微速成计划基本功提升") # 生成随机无序数据 random_data = generator() # 打印无序数据 print(random_data) # 插入排序 sorted_data = bubble_sort(random_data) # 打印排序结果 print(sorted_data)

    1K60发布于 2018-04-09
  • 来自专栏开源优测

    Python3希尔排序

    希尔排序 概述 希尔排序(Shell's Sort)是插入排序的一种又称“缩小增量排序”(Diminshing Increment Sort),是直接插入排序算法的一种更高效的改进版本。 希尔排序是非稳定排序算法。 该方法因D.L.Shell于1959年提出而得名。 基本过程 希尔排序属于插入类排序,是将整个有序序列分割成若干小的子序列分别进行插入排序排序过程: 先取一个正整数d1<n,把所有序号相隔d1的数组元素放一组,组内进行直接插入排序; 然后取d2<d1,重复上述分组和排序操作; 直至di=1,即所有记录放进一个组中排序为止。 时间成本 希尔排序是按照不同步长对元素进行插入排序,当刚开始元素很无序的时候,步长最大,所以插入排序的元素个数很少,速度很快; 当元素基本有序了,步长很小,插入排序对于有序的序列效率很高。

    963100发布于 2018-04-09
  • 来自专栏CSDN搜“看,未来”

    通俗点聊聊算法 - 排序3)快速排序,亲测

    这些天做题的时候吃了不少 快速排序不熟的亏,我痛下决心,一定要自己写出快速排序的几种实现方法! 1、什么是快速排序 快速排序是很重要的算法,和傅里叶变化等算法并称二十世纪最伟大的十大算法。 快速排序的核心思维就是“分而治之”,就像封建王朝的“分封制”。将一大块“领土”,依据“嫡庶长幼”,分为不同部分,各个部分在自行细分,直到分无可分之后,便等级森严了。 3、元素的分配 3.1双边遍历 这个方法呢,如果对快慢指针和双指针不是很了解的朋友可以现在了解一下。 ? 首先啊,确定基准为4,左指针指向第一个元素,右指针指向尾巴。 ? ,left-1); doubleSideSort(vec1, right, keep_right); } int main() { vector<int> vec1 = { 4,6,8,7,9,3,1 keep_slow,slow-1); oneSideSort(vec1,slow+1, keep_hight); } int main() { vector<int> vec1 = {2,1,2,3}

    70810发布于 2020-08-26
  • 来自专栏python3

    Python3实现快速排序、归并排序、堆

    然后下一轮只需要对主元左边的数组和 右边的数组分别排序即可,数组大小减为原来的一半。 每轮排序确定一个主元,该轮排序完成后待排序的两个数组的长度变为原来的一半,可以看做是一个树, 根节点是原数组,每一轮会分裂一次,每个节点被分裂成2个子节点,直到该节点长度为1,不需再进行排序 为止,这样就一共需要logN轮,每轮每部需要比较N次,即时间复杂度nlogn 快排是不稳定排序(相同大小的元素排序后不一定按照原顺序) :param data: 待排序的数组 " 归并排序是稳定算法,时间复杂度为nlogn :param data: 待排序的数组 """ def sort(start, end): if start < end temp = [] # 建立全局辅助数组,避免递归过程不断创建 sort(0, len(data) - 1) def heap_sort(data): """ 堆排序是不稳定的一种排序算法

    48610发布于 2020-01-06
  • 来自专栏牛客网

    知识总结:Java集合对象排序1.List排序2.Set排序 3.Map排序

    1.List排序 这个和数组的排序又不一样了。 还有一种方式就是将set直接装进一个list对象里面,然后使用排序就好。 3.Map排序 这个就稍微麻烦一些了。 Map是键值对,所以既可以按照键进行排序,也可以按照值进行排序。 HashMap();   Player p1 = new Player("John", 1000);   Player p2 = new Player("Ben", 3000);   Player p3  = new Player("Jack", 2000);   map.put(p1);   map.put(p2);   map.put(p3);   //将Map里面的所以元素取出来先变成一个set 3.对于Map来说,稍微复杂一点,但是原理也就是第2种情况。 本文来源于牛客网 作者:鱼大水

    5.7K100发布于 2018-04-28
领券