![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
排序算法
安静读书
站在巨人的肩膀上,指引巨人的方向。
展开
-
从10亿个数中找出前100个最大的
谈从10亿个数中找出前100个最大的(阿里java二面)10亿个浮点数大概占据3G左右的空间,因此全部一次性读入内存目前在个人PC上是不太现实的。本次讨论不考虑内存等等,只考虑算法。如果一次性比较排序,然后输出前面最大的100个,那么众所周知,算法的时间复杂度不下于O(N logN),此处的N为数的个数(10亿)。如果用堆排序,由于堆排序像合并排序而不像插入排序,堆排序的运行时间为O(N logN);又像插入排序而不像合并排序,堆排序是一种原地排序。因此堆排序具有相对小的运行时间和占用相对小的额原创 2020-11-18 09:35:51 · 1146 阅读 · 0 评论 -
冒泡排序算法-思想+Java实现
冒泡排序思想基本思想: 冒泡排序,类似于水中冒泡,较大的数沉下去,较小的数慢慢冒起来,假设从小到大,即为较大的数慢慢往后排,较小的数慢慢往前排。 直观表达,每一趟遍历,将一个最大的数移到序列末尾。算法描述比较相邻的元素,如果前一个比后一个大,交换之。 第一趟排序第1个和第2个一对,比较与交换,随后第2个和第3个一对比较交换,这样直到倒数第2个和最后1个,将最大的数移动到最后一位。 第二趟将第二大的数移动至倒数第二位 ...... 因此需要n-1趟。 动图实现...原创 2020-08-27 23:06:32 · 284 阅读 · 0 评论 -
每天一排序:归并排序
归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。归并排序是一种稳定的排序方法。这是百度百科给的解释,需要深入体会。。。记住最后一句话,归并排序是一种稳定的排序方法。...原创 2019-10-12 10:51:31 · 209 阅读 · 0 评论