
排序
文章平均质量分 87
Bug.Remove()
海阔凭鱼跃,天高任鸟飞~
展开
-
冒泡、选择排序算法——C语言实现
八大排序算法------C语言目录1.冒泡排序例:对数arr[] = {3,7,6,8,0,4,56,78,45}这个数组进行从小到大排序,设数组的长度为nLen(这里nLen = 9)1.冒泡排序核心思想:相邻两个元素之间相比,如果前者比后者大,则交换两个值(基于交换)。排序过程:初始时:3与7相比—>3小于7—>不做交换,继续进行下一次比较—>7与6相比—>7大于6—>交换7与6的值···—>最终,第一次循环找到最大值78放到最后,此时第一次循环结束。原创 2021-06-06 22:18:18 · 346 阅读 · 0 评论 -
基数排序-------C语言实现
基数排序核心思想:根据数字的位(个位、十位、百位…)来进行的排序算法,有点类似于哈希表,基数排序首先应该找到数字中最大的数,然后算出这个数有几位,其次依次根据个位、十位、百位、千位、…、最大位来进行排序平均时间复杂度:O( n*k)k:为最大的位数空间复杂度:O(m+n)空间复杂度我们也可以看出来,主要就是取决于链表的数量以及序列元素的数量,所以空间复杂度为O(n+k)稳定性:稳定适用场合:数组量大且较无序排序名称最好时间复杂度平均时间复杂度最坏时间复杂度空间复杂度稳定性适用原创 2021-06-29 11:39:53 · 1719 阅读 · 0 评论 -
堆排序---C语言实现
堆排序核心思想:利用了完全二叉树的思想(一个有n个结点的完全二叉树,其父结点 i 的范围为:0~n2\frac{n}{2}2n - 1 左孩子:2*i+1 右孩子:2*i+2),即有大堆:所有的父节点的值均大于孩子的值,最终建堆后堆顶则为最大值小堆:所有的父节点的值均小于孩子的值,最终建堆后堆顶则为最小值此例中基于大堆实现实现过程:我们将来的数组视为一颗完全二叉树,如下图所示:根据大堆的特点,我们首先应该建堆,而建堆的顺序则是由下往上,因此,我们先从最底层开始,由于父节点的范围是 0~n2\f原创 2021-06-22 11:06:17 · 206 阅读 · 0 评论 -
归并排序算法详解---C语言实现
归并排序前备知识:如果数组中只有一个数,那么这个数组一定是有序的!核心思想:将两个有序的数组合并为一个有序的数组(运用了分组的思想:递归)实现过程:对于如下数组进行归并排序,过程如下:如上所示,由于归并排序是将两个有序的数组合并为一个有序的数组,因此我们首先是对上述数组进行拆分,数组长度为nLen = 9,因此将数组均分为nLen/2 = 4,拆分后如下图所示:如上图所示,经过一次折半将数组拆分为了两个数组,由于归并排序的思想是将两个有序的数组进行合并,因此我们需要继续对数组进行拆分,拆分后如下原创 2021-06-21 21:47:09 · 1220 阅读 · 0 评论 -
插入排序与希尔排序---C语言实现
插入排序核心思想:设置一个变量来记录当前插入位置的值,如果前一个位置大于该值则将前一个位置的值移入该位置,然后继续与前面元素的值比较,直至该值大于前一个值或者移动到最开头位置,插入该值。实现方式例:对如上数组arr进行由小到大排序(注:一个元素肯定有序,插入元素之前一定是一个有序序列)注:这里橙色箭头仅表示此时要插入的位置,蓝色箭头表示与插入的值比较的位置首先,我们应该定义一个变量来标记一下即将要插入的值:nValue = arr[1];然后,数组从下标为1的位置开始与前面的元素进行比较,如果此原创 2021-06-20 20:21:08 · 328 阅读 · 0 评论 -
快速排序详解---C语言实现
5 快速排序核心思想:初始时选择一个标志位(一般是第一个),让其余各位的值与该标志位的值相比较,刚开始从数组尾部开始选择小于该标志位的值放于前面,然后再从前面选择大于该标志位的值放于后面,如此循环,最终可以将数组以该标志位分为两部分,而后在对前后两部分循环操作。实现过程(改进前):快速排序通俗点讲就是挖坑填补法,取一个值来将数组分成两部分,左侧都比所取标志的值小,右侧都比所取的标志值大,具体看下;初始时,取数组的第一个元素为坑(分组标志),设置一个变量标记它,有int nValue = arr[0];原创 2021-06-20 20:18:21 · 265 阅读 · 0 评论