Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
梦境迷离
Cs Summary Reflection
提交
8acda275
C
Cs Summary Reflection
项目概览
梦境迷离
/
Cs Summary Reflection
大约 1 年 前同步成功
通知
4
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
C
Cs Summary Reflection
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
8acda275
编写于
5月 02, 2020
作者:
梦境迷离
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix
上级
8cdb8d3f
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
10 addition
and
12 deletion
+10
-12
docs/_posts/算法/2018-08-11-算法-排序算法.md
docs/_posts/算法/2018-08-11-算法-排序算法.md
+10
-12
未找到文件。
docs/_posts/算法/2018-08-11-算法-排序算法.md
浏览文件 @
8acda275
...
@@ -755,7 +755,7 @@ public class BucketSort extends Constant {
...
@@ -755,7 +755,7 @@ public class BucketSort extends Constant {
4.
当临时数组存满时,将数组写至磁盘,并清空数组内容。
4.
当临时数组存满时,将数组写至磁盘,并清空数组内容。
5.
重复过程(3)、(4),直至所有文件块读取完毕。
5.
重复过程(3)、(4),直至所有文件块读取完毕。
### Collections.sort使用哪种排序算法?Arrays.sort() ?
### Collections.sort使用哪种排序算法
?Arrays.sort() ?
1、Arrays.sort()
1、Arrays.sort()
...
@@ -768,17 +768,16 @@ public class BucketSort extends Constant {
...
@@ -768,17 +768,16 @@ public class BucketSort extends Constant {
总结一下Arrays.sort()方法,如果数组长度大于等于286且连续性好的话,就用归并排序,如果大于等于286且连续性不好的话就用双轴快速排序。
总结一下Arrays.sort()方法,如果数组长度大于等于286且连续性好的话,就用归并排序,如果大于等于286且连续性不好的话就用双轴快速排序。
如果长度小于286且大于等于47的话就用双轴快速排序,如果长度小于47的话就用插入排序。
如果长度小于286且大于等于47的话就用双轴快速排序,如果长度小于47的话就用插入排序。
但是,当数组的元素是对象时,则与Collections.sort()相同。
但是,当数组的元素是对象时,则与Collections.sort()相同
,内部使用legacyMergeSort()和TimSort.sort()
。
2、Collections.sort()
2、Collections.sort()
底层调用归并排序legacyMergeSort()和TimSort.sort(),实际就是用了Arrays.sort
(元素是对象的实现)
。
底层调用归并排序legacyMergeSort()和TimSort.sort(),实际就是用了Arrays.sort。
Timsort是结合了归并排序(merge sort)和插入排序(insertion sort)而得出的排序算法,它在现实中有很好的效率。
Timsort是结合了归并排序(merge sort)和插入排序(insertion sort)而得出的排序算法,它在现实中有很好的效率。
大体是说,Timsort是稳定的算法,当待排序的数组中已经有排序好的数,它的时间复杂度会小于 nlogn。与其他合并排序一样,TimSort是稳定的排序算法,最坏时间复杂度是 O(nlogn)。
大体是说,Timsort是稳定的算法,当待排序的数组中已经有排序好的数,它的时间复杂度会小于 nlogn。与其他合并排序一样,TimSort是稳定的排序算法,最坏时间复杂度是 O(nlogn)。
在最坏情况下,和TimSort算法需要的临时空间是 n/2,在最好情况下,它只需要一个很小的临时存储空间
在最坏情况下,和TimSort算法需要的临时空间是 n/2,在最好情况下,它只需要一个很小的临时存储空间
### 256M的内存如何对16g的数组进行排序 ?
### 256M的内存如何对16g的数组进行排序 ?
多路归并,因为没要求存储,只要求了内存,可以多路归并。
多路归并,因为没要求存储,只要求了内存,可以多路归并。
...
@@ -802,24 +801,23 @@ Timsort是结合了归并排序(merge sort)和插入排序(insertion sort
...
@@ -802,24 +801,23 @@ Timsort是结合了归并排序(merge sort)和插入排序(insertion sort
1.
如果重复率很高,可以采用前缀树,因为trie树适用于数据量大,重复多,但是数据种类小必须得可以放入内存;
1.
如果重复率很高,可以采用前缀树,因为trie树适用于数据量大,重复多,但是数据种类小必须得可以放入内存;
2.
按照hash进行分组,这样就能避免相同的数分到不同区域去了,导致不好统计。hash分组完毕后,然后用前缀树或者hashmap来计算每个组的前k个频率最高的数,最后对各个组的前k个数进行统计即可。
2.
按照hash进行分组,这样就能避免相同的数分到不同区域去了,导致不好统计。hash分组完毕后,然后用前缀树或者hashmap来计算每个组的前k个频率最高的数,最后对各个组的前k个数进行统计即可。
###
给40亿个不重复的unsigned int的整数,没排过序的,然后再给一个数,如何快速判断这个数是否在那40亿个数当中
?
###
在40亿个乱序且不重复的unsigned int的整数中判断数x是否存在
?
这里我们把40亿个数中的每一个用32位的二进制来表示
这里我们把40亿个数中的每一个用32位的二进制来表示,假设这40亿个数开始放在一个文件中。
假设这40亿个数开始放在一个文件中。
然后将这40亿个数分成两类:
然后将这40亿个数分成两类:
1.
最高位为0
1.
最高位为0
2.
最高位为1
2.
最高位为1
并将这两类分别写入到两个文件中,其中一个文件中数的个数
<
=20
亿
,
而另一个
>
=20亿(这相当于折半了);与要查找的数的最高位比较并接着进入相应的文件再查找
并将这两类分别写入到两个文件中,其中一个文件中数的个数
<
=20
亿
,
而另一个
>
=20亿(这相当于折半了);与要查找的数的最高位比较并接着进入相应的文件再查找
再然后把这个文件为又分成两类:
再然后把这个文件为又分成两类:
1.
次最高位为0
1.
次最高位为0
2.
次最高位为1
2.
次最高位为1
并将这两类分别写入到两个文件中,其中一个文件中数的个数
<
=10
亿
,
而另一个
>
=
10亿(这相当于折半了);与要查找的数的次最高位比较并接着进入相应的文件再查找。
并将这两类分别写入到两个文件中,其中一个文件中数的个数
<
=10
亿
,
而另一个
>
=
10亿(这相当于折半了);与要查找的数的次最高位比较并接着进入相应的文件再查找。
以此类推,就可以找到了,而且时间复杂度为 O(logn)。
以此类推,就可以找到了,而且时间复杂度为 O(logn)。
### 海量数据求TopK的普遍方法
### 海量数据求TopK的普遍方法
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录