排序
文章平均质量分 82
我没有空军
这个作者很懒,什么都没留下…
展开
-
排序(五)——非比较排序+排序总结
我们前面学了几种比较排序,这里我们对他们进行一个总结时间复杂度直接插入排序:O(N^2)希尔排序: O(N^1.3)选择排序: O(N^2)堆排序: O(NlogN)冒泡排序: O(N^2)快排: 最好O(NlogN),最坏O(N^2),但是三数取中优化之后一般不会出现最坏归并排序: O(NlogN)空间复杂度直接插入排序:O(1)希尔排序: O(1)选择排序: O(1)原创 2024-04-19 07:00:00 · 963 阅读 · 0 评论 -
排序(四)——归并排序 + 外排序
目录1.归并排序递归实现代码2.归并排序非递归代码3.比较快排、归并和堆排序4.归并排序实现外排序我们之前对两个有序数组进行排序就用到了归并的思想,对于两个有序数组,我们分别取他们首元素比较大小,取小的插入到一个新开辟的数组中,归并排序的前提就是要有两个有序序列,而且还要开辟一块新的空间来存放新的有序的数组。那么对于一个无序的数组该如何使用归并排序呢这一整个数组我们可以把它分成左右两个区间来看,一个是 [0,4] ,一个是 [5,9] ,而只要这两个区间有序了,我们就有办法通过控制下标来进行归并排序。怎么使原创 2024-04-18 07:00:00 · 1267 阅读 · 0 评论 -
排序(二)选择排序
但是就算这样优化了,冒泡排序还是最慢的排序算法之一,跟直接选择排序和直接插入排序半斤八两,唯一的优势就是对有序的数据排序,但是这个条件太苛刻了。而直接选择排序除了正常的数据排序效率低下之外,如果数据本来就有序,选择排序也不会管,他还是会遍历这么多次数组,然后选数进行交换。堆排序的本质上也是一种选择排序,在之前二叉树的章节中我们讲解了堆排序的实现,我们使用就是使用几个函数,建堆,交换,向下调整。直接选择排序是一种非常简单粗暴,也是效率非常低的一种排序,直接选的排序的基本思想就是:。原创 2024-04-16 08:00:00 · 454 阅读 · 0 评论 -
排序(一)——插入排序 希尔排序
试想,当原数组的数据是接近逆序的时候,他的大的数据在前面,而小的数据在后面,如果采用直接排序的话就需要一个位置一个位置交换,十分的耗时,当我们用预排序的话,他不是一次只移动一个位置,而是一次移动gap个位置,这样一来能让小的数据更快地来到数组的前面,大的数据也能更快的调换到后面,使得原本逆序的数组变得更接近有序,更有利于插入排序。同时,希尔排序一般是用于排序数据量很大的时候,这时候也能让更大的数据更快的到后面,小的数据更快的到前面,这样优化了直接插入排序。我们可以认为,只有一个数据的时候他就是有序的。原创 2024-04-15 18:40:51 · 626 阅读 · 0 评论