个人主页:个人主页个人专栏:《数据结构》《C语言》文章目录前言一、插入排序1.直接插入排序2.希尔排序二、选择排序1.选择排序2.堆排序三、交换排序1.冒泡排序2.快速排序(递归)a.hoare版(PartSort1)b.挖坑法(PartSort2)c.前后指针法(PartSort3)3.快速排序(非递归)四、归并排序归并排序(递归)归并排序(非递归)五、计数排序总结前言排序:使一串数据,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。一、插入排序插入排序的思路:把待排序数组,逐个插入到已经排好序的有序数组中,直到所有待排序数组插入完成,的到一个新的有序数组。1.直接插入排序假如
目录1、插入排序 1)直接插入排序插入排序优化(二分)总结 2)希尔排序 希尔排序优化(二分) 总结 2、归并排序总结归并排序解决海量数据的排序问题排序的概念:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。稳定性:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,r[i]=r[j],且r[i]在r[j]之前,而在排序后的序列中,r[i]仍在r[j]之前,则称这种排序算法是稳定的;否则称为不稳定的。1、插入排序 1)直接插入排序基本思想:把待排序的记录按其关键码值的大小逐个插入到一个已经排好序
本博客主要围绕五种常见的排序算法展开讨论,包括选择排序、快速排序、归并排序、冒泡排序和插入排序。针对每种算法,我对其思想、特点、时间复杂度、稳定性以及优缺点进行了详细解释和比较。文章目录1.冒泡排序1.1算法思想:1.2代码实现:1.3解析代码:1.4示例输出:1.5总结:2.插入排序2.1算法思想:2.2代码实现:2.3解析代码:2.4示例输出:2.5总结:3.选择排序3.1算法思想:3.2代码实现:3.3解析代码:3.4示例输出:3.5总结:4快速排序4.1算法思想:4.2代码实现:4.3解析代码:4.4示例输出:4.5总结:5归并排序5.1算法思想:5.2代码实现:5.3解析代码:5.4
🍕博客主页:️自信不孤单🍬文章专栏:数据结构与算法🍚代码仓库:破浪晓梦🍭欢迎关注:欢迎大家点赞收藏+关注文章目录🍓冒泡排序概念算法步骤动图演示代码🍊选择排序概念算法步骤动图演示代码🍉插入排序概念算法步骤动图演示代码❣️希尔排序概念算法步骤动图演示代码🍥堆排序概念算法步骤动图演示代码🍚快速排序概念算法步骤动图演示代码(递归)代码(非递归)🍕归并排序概念算法步骤动图演示代码代码(非递归)🍭计数排序概念算法步骤动图演示代码🍧排序算法复杂度及稳定性🍓冒泡排序概念冒泡排序(BubbleSort)也是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。
目录什么是归并排序(Merging_sort)?归并排序的适用场景:演示归并排序的过程(默认arr和brr两个数组都是有序的):代码实现:如果我们事先并没有分配好两个已经排序好的数组,而是直接的一个无序序列呢?代码实现:什么是归并排序(Merging_sort)?在写归并排序的代码之前,我们先对归并排序的定义和排序原理进行梳理。在严蔚敏的《数据结构(C语言版)》一书中对归并排序是这样定义的:归并排序(Merging_Sort)是一类不同的排序方法。“归并”的含义是将两个或者两个以上的有序表组合成一个新的有序表。利用归并的思想容易实现排序,且这种实现方法已为读者熟悉,无论是顺序存储结构还是链表存
目录一、插入排序二、希尔排序 三、选择排序1)直接选择排序:2)堆排序四、交换排序 1)冒泡排序2)快速排序1、Hoare版2、挖坑法3、前后指针快排优化快速排序非递归来实现快排总结五、归并排序递归实现非递归实现六、计数排序一、插入排序步骤:1、从第一个元素开始,该元素可以被认你为已经被排序了2、取下一个元素tmp,从已经排列的序列从后往前扫描3、如果该元素大于tmp,则将它移动到下一位4、重复步骤三,直到找到元素小于等于tmp结束5、将tmp插入到该元素的后面,如果已排序的序列都大于tmp,则将tmp插入到下标为0位置6、重复步骤2-5publicvoidinsertSort(int[]ar
目录一、常见排序算法的实现 1.1 交换排序1.1.1 基本思想1.1.2 冒泡排序 1.1.3 快速排序1.2归并排序1.3非比较排序二、排序算法复杂度及稳定性分析 人总得为过去的懒惰而付出点代价!一、常见排序算法的实现 1.1 交换排序1.1.1 基本思想基本思想:所谓交换,就是根据序列中两个记录键值的比较结果来对换这两个记录在序列中的位置,交换排序的特点是:将键值较大的记录向序列的尾部移动,键值较小的记录向序列的前部移动。1.1.2 冒泡排序 详细内容见:冒泡排序链接冒泡排序:voidBubbleSort(int*a,intn){ for(inti=0;i1;i++)//趟数 {
一.前言我们内部排序已经学了插入排序(直接插入排序、折半插入排序、希尔排序),交换排序(冒泡排序、快速排序),选择排序(简单选择排序、堆排序),这些都属于内部排序,接下来我们学习内部排序里面剩下的归并排序和基数排序。二.归并排序1.算法思路归并排序与上述基于交换、选择等排序的思想不一样,“归并”的含义是将两个或两个以上的有序表合并成一个新的有序表。假定待排序表含有n个记录,则可将其视为n个有序的子表,每个子表的长度为1,然后两两归并,得到[n/2]个长度为2或1的有序表;继续两两归并…如此重复,直到合并成-一个长度为n的有序表为止,这种排序方法称为2路归并排序。分解:将含有n个元素的待排序表分
归并排序归并,指合并,合在一起。归并排序(MergeSort)是建立在归并操作上的一种排序算法。其主要思想是分而治之。若将两个有序集合并成一个有序表,称为2-路归并,与之对应的还有多路归并。怎么分对于排序最好的情况来讲,就是只有两个元素,这时候比较大小就很简单,但是还是需要比较如果拆分为左右各一个,无需比较即是有序的。怎么治借助一个辅助空数组,把左右两边的数组按照大小比较,按顺序放入辅助数组中即可。以下面两个有序数组为例:代码实现publicstaticvoidmergeSort(int[]arr){if(arr==null||arr.length>1);process(arr,L,mid);
目录1、归并的思想2、归并排序的思想2.1基本思想2.2图解分析3、归并排序递归版本代码实现3.1代码解析3.2注意事项3.2.1错误划分:[begin,mid-1],[mid,end]3.2.2正确划分:[begin,mid],[mid+1,end]4、归并排序的测试5、时间复杂度、空间复杂度分析5.1时间复杂度5.2空间复杂度1、归并的思想这是我们第二次了解归并的思想了,第一次在我们之前的链表oj题里面,合并两个有序链表,我们当时解题的思想就是归并的思想。我们这次来系统的学习一下归并的思想(本篇以升序为例展开):归并两个数组(链表)时,我们使用两个指针指向不同的数组首元素,控制并遍历两个数