![](https://img-blog.csdnimg.cn/direct/69df700d45884615acd24b27deeb4f80.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
排序算法
排序算法
夹心宝贝
在校程序员一枚
展开
-
排序算法总结
一张图搞定。原创 2024-01-18 00:57:40 · 376 阅读 · 1 评论 -
排序算法10----堆排序(C)
堆排序是借用数据结构堆来进行排序的一种算法,所以要想弄明白堆排序,首先要弄明白堆。首先我们先回顾一下堆:大堆:头大尾小,父结点 >= 子结点小堆:头小尾大,父结点原创 2024-01-18 00:53:03 · 594 阅读 · 1 评论 -
排序算法8----归并排序(非递归)(C)
归并排序既可以是(在内存上的数据排序),也可以是(在文件中的数据排序)。其他排序一般都是内排序。区别于快速排序的非递归,归并排序非递归不适合使用栈。因为快速排序的本质是一种前序递归,而归并排序的本质是一种后序递归,并没有“根”来区分左右。那么归并排序的非递归应该怎么样实现呢?原创 2024-01-15 12:49:38 · 482 阅读 · 0 评论 -
排序算法6---快速排序(非递归)(C)
将右区间左区间压栈(后进先出),然后取出左区间,再将左区间的子右区间和子左区间压栈,再取出左区间的子左区间......,当栈为空时,即全部取出,此时已经有序。回顾递归的快速排序,都是先找到key中间值,然后递归左区间,右区间。那么是否可以实现非递归的快排呢?答案是对的,这里需要借助数据结构的。,来进行单趟排序,得到中间基准值,并划分做右区间(不记得指针法的回看博客)最后使用栈来压栈出栈。原创 2024-01-15 20:41:41 · 473 阅读 · 0 评论 -
排序算法9----计数排序(C)
计数排序是一种非比较排序,不比较大小。原创 2024-01-15 12:37:25 · 576 阅读 · 0 评论 -
排序算法7----归并排序(C语言)
归并排序是建立在归并操作上的一种有效的排序算法,该算法是采用的一个非常典型的应用。将无序的序列分解到单个元素,然后将有序的子序列合并,得到完全有序的序列:即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。原创 2024-01-14 20:30:50 · 598 阅读 · 1 评论 -
排序算法5----快速排序(前后指针法)(C语言)
当cur找到小时,prev就朝后挪动一位,然后交换cur位置和prev位置的值。总结:从前面三种快排方法来看,快排其实很类似于二叉树结构:每次单趟排序后,又递归左区间和右区间,(类似左子树和右子树)。当最后cur越界之后,prev指针往后的数全都是比基准值大的数,最后交换prev和基准值,那么此时基准值就处于中间位置。:cur往后找小,找到小后交换arr[cur]和arr[++prev],如图可以看出,交换二者之后,既然如此,那等后面,我在来展示一波非递归快排,先提示一波:借用栈来实现类似递归!原创 2023-12-16 14:36:40 · 696 阅读 · 1 评论 -
排序算法5----快速排序(挖坑法)(C语言)
将基准值设为“坑”,然后右边先走,找小,找到小的后,将“小”填入坑,再将原来小的位置,重置为坑,接着左边走。直到left和right相遇时,一定相遇为“坑”(因为left和right始终有一个为坑,那么坑左边为小,右边为大,再将key放入坑中),循环结束。,其中n为待排序数组的长度。“挖坑法”和Hoare的办法从本质上来说是一致的,差别就是在单趟排序的方法不同,理解好了Hoare版本的单趟排序,那么对“挖坑法”理解难度就不大了。挖坑法是基于Hoare版本的一种改良(改良单趟排序时的方法),其本质是类似的。原创 2023-12-16 13:51:59 · 383 阅读 · 1 评论 -
排序算法5----快速排序(Hoare版本)(C语言)
快速排序,最初是由Hoare这个天才想出来的,给复杂的排序算法提高了很大的时间效率,但后后来,又有人将Hoare的方法进行了改进,引出挖坑法和前后指针法,今天这儿就实现以下Hoare版本的快排。原创 2023-12-16 10:30:13 · 1071 阅读 · 1 评论 -
排序算法4----希尔排序(C语言)
gap很大时,每一趟执行的次数少,而当gap很小时,有很可能会直接执行break,执行的次数也很小。综合来说,实质上,希尔排序是对插入排序的一种优化。那么gap从大到小执行比较插入数据时,会将无序的数组,逐渐变得。,而由于gap比较大的时候,两个需要比较数之间又间隔很大,那么每次比较插入就不会执行n次,而是会执行一个取决于gap的大小的次数。:既然gap最终都会等于1,等于1的时候那不就是插入排序了吗,为啥要多此一举呢,时间复杂度不会更高吗?,这就非常牛逼了,发明这个算法的作者简直是个天才!原创 2023-12-15 21:56:40 · 556 阅读 · 0 评论 -
排序算法3----插入排序(C语言)
每次插入时,将end位置及其之前的区间看作是有序的,然后将end后面那个数,插入到合适位置。插入排序最重要的是:将前面的区间看作。时间复杂度:O(N^2),最好情况下为O(N)然后将后一个数插入。,即原数组已经有序,原创 2023-12-14 21:29:29 · 385 阅读 · 1 评论 -
排序算法2----选择排序(C语言)
选择排序思想:通过每趟排序,寻找到最大(最小)的数的下标,然后交换每趟排序的起始点的数和这个数。时间复杂度:O(N^2),空间复杂度O(1):找最大或最小的数的下标,然后交换。原创 2023-12-14 20:31:59 · 382 阅读 · 1 评论 -
排序算法1----冒泡排序(C语言)
冒泡排序作为最简单的一种排序,非常适合初学者开始学习排序算法,今天就来讲一讲冒泡排序。在一趟筛查中,逐步将每次需要排序的数挪到最后,一共n-1次筛查,最终就会形成一个有序的数组。同样,第二趟,将次大数7排到数组倒数第二个位置,并不再参与排序......可以看到,在一趟中,我们将最大数8排到了数组的末尾,并且下趟8将不再参与排序。最终将会得到: 1 2 3 4 5 7 8。时间复杂度为O(N^2),空间复杂度为O(N)对于冒泡排序我就不多说了,多练就好!原创 2023-12-14 20:13:38 · 393 阅读 · 0 评论