当前位置:首页 > 科技数码

排序算法总结 数据结构_排序算法总结

作者fredal

https://www.jianshu.com/p/28d0f65aa6a1

所有内部排序算法的汇总表

现在Tb1和Tb2都包含一些连续的字符串。我们取出每盘磁带的第一个顺序字符串,并将它们组合起来,并将结果写入Ta1,Ta1是一个双长度的顺序字符串。然后,我们从每盘磁带中取出下一个连续的字符串,将其合并并写入Ta2。继续此过程,直到Tb1或Tb2为空。继续这个过程,直到我们得到一个长度为n的连续字符串

如果我们有额外的磁带,我们可以减少对输入数据进行排序的次数,我们可以通过将基本的(2路)合并扩展到(k路)合并来做到这一点。这叫做多路合并

上面讨论的k- way合并方案需要使用2k磁带。事实上,我们只需要使用k+1个磁带就可以完成排序工作,这就是所谓的多阶段合并。以三盘磁带完成双向合并为例:

这里序列的初始分布是个关键问题,其实斐波那契数是最好的。

对于序列的构造,也可以采用排列选择排序,采用堆的思想,有特殊的价值。

接下来,实现完整的外部排序

package com . fredal . structure;

import Java . io . file;

import Java . io . FileInputStream;

import Java . io . FileNotFoundException;

import Java . io . FileOutputStream;

import Java . io . IOexception;

import Java . util . ArrayList;

import Java . util . arrays;

import Java . util . iterator;

import Java . util . random;

publicclassExternalSort{

publicationstatintbuffer _ SIZE = 10;

公共文件排序(文件文件)抛出异常{

ArrayList<。文件>files = split(file);

returnprocess(文件);

}

//递归方法来合并列表,直到我们剩下一个

//单个合并列表

私有文件进程(数组列表& lt文件>list)throwsIOException {

if(list.size() == 1) {

return list . get(0);

}

ArrayList<。文件>inter = newArrayList<。文件>();

for(迭代器& lt文件>itr = list . iterator();itr . HasNeXt();) {

file one = itr . next();

if(itr.hasNext()) {

file two = itr . next();

inter.add(合并(一、二));

} else{

returnone

}

}

return process(inter);

}

/**

*将原始文件分割成多个子文件。

*/

privateArrayList<。文件>分割(文件文件)抛出异常{

ArrayList<。文件>files = newArrayList & lt文件>();

int[]BUFFER = new int[BUFFER _ SIZE];

FileInputStream fr = NewFileInputStream(文件);

booleanfileComplete = false

while(!fileComplete) {

intindex = buffer.length

for(inti = 0;i <。缓冲区长度& amp& amp!fileCompletei++) {

buffer[I]= ReadInt(fr);

if(buffer[i] == - 1) {

fileComplete = true

index = I;

}

}

if(缓冲区[ 0]>;- 1) {

Arrays.sort(buffer,0,index);

File f = newFile( "set"+ newRandom()。nextInt());

file output stream writer = NewFileoutput stream(f);

for(intj = 0;j <。指数;j++) {

writeInt(buffer[j],writer);

}

writer . close();

files . add(f);

}

}

fr . close();

returnfiles

}

/**

*将两个已排序的文件合并为一个文件。

*

* @paramone

* @paramtwo

* @返回

* @throwsIOException

*/

私有文件合并(文件一,文件二)抛出异常{

FileInputStream fis 1 = NewFileInputStream(一);

file inputstream fis 2 = new file inputstream(两个);

文件输出= newFile("合并"+ newRandom()。nextInt());

file output stream OS = NewFileoutput stream(输出);

inta = ReadInt(fis 1);

int b = ReadInt(fis 2);

booleanfinished = false

while(!完成){

if(a!=-1 & amp;& ampb!= - 1) {

if(a & lt;b) {

writeInt(a,OS);

a = ReadInt(fis 1);

} else{

writeInt(b,OS);

b = ReadInt(fis 2);

}

} else{

finished = true

}

if(a = =-1 & amp;& ampb!= - 1) {

writeInt(b,OS);

b = ReadInt(fis 2);

} else if(b = =-1 & amp;& ampa!= - 1) {

writeInt(a,OS);

a = ReadInt(fis 1);

}

}

OS . close();

returnoutput

}

privatevoidwriteInt(intvalue,合并文件输出流)

throwsIOException {

merged . write(value);

merged . write(value & gt;>。8);

merged . write(value & gt;>。16);

merged . write(value & gt;>。24);

merged . flush();

}

private InTeradint(FileInputStream fis)throwSioException {

int buffer = fis . read();

if(缓冲== - 1) {

return-1;

}

buffer | =(fis . read()& lt;& lt8);

buffer | =(fis . read()& lt;& lt16);

buffer | =(fis . read()& lt;& lt24);

returnbuffer

}

/**

* @paramargs

* @throwsIOException

*/

public static void main(String[]args)throwSioException {

file file = New FIle(" main set ");

random random = new random(system . current timemillis());

file output stream fw = NewFileoutput stream(文件);

for(inti = 0;i <。BUFFER _ SIZE * 3;i++) {

int ger = random . Nextint();

ger = ger <。0?-ger:ger;

fw . write(ger);

fw . write(ger & gt;>。8);

fw . write(ger & gt;>。16);

fw . write(ger & gt;>。24);

}

fw . close();

ExternalSort sort = new ExternalSort();

system . out . println(" Original:");

dumpFile(排序,文件);

file f = sort . sort(file);

system . out . println(" Sorted:");

dumpFile(sort,f);

}

私有静态无效转储文件(外部排序,文件f)

throwsFileNotFoundException,IOException {

FileInputStream fis = NewFileInputStream(f);

inti = sort . readint(fis);

while(i!= - 1) {

system . out . println(Integer . ToString(I));

I = sort . readint(fis);

}

}

}

长的

根据

接近

填充

1.《排序算法总结 数据结构_排序算法总结》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。

2.《排序算法总结 数据结构_排序算法总结》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。

3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/keji/781960.html

上一篇

腹沟疝手术后几天能走 腹股沟疝术后注意事项(成年人)

下一篇

鸡爪怎么去骨 工人用嘴给鸡爪去骨一天啃出1000斤 现场令人咋舌

qq阅读在线阅读 QQ阅读本地TXT文件在哪里 怎么导入到阅读列表

  • qq阅读在线阅读 QQ阅读本地TXT文件在哪里 怎么导入到阅读列表
  • qq阅读在线阅读 QQ阅读本地TXT文件在哪里 怎么导入到阅读列表
  • qq阅读在线阅读 QQ阅读本地TXT文件在哪里 怎么导入到阅读列表
产品质量合格证 停止执行 | 消防产品质量合格证明文件等57项证明事项不再提交

产品质量合格证 停止执行 | 消防产品质量合格证明文件等57项证明事项不再提交

中华人民共和国应急管理部于2018年发布第12号公告,公布了被应急管理部取消的部门规章设定的45项认证项目和规范性文件设定的12项认证项目,其中附件1《部门规章设定的认证项目取消目录》中有14项与消防相关。 其中, 根据《建设工程消防监督管理条例》(公安部令第119...

两个pdf合并成一个pdf 如何将多个pdf文件合并成一个pdf文件?

  • 两个pdf合并成一个pdf 如何将多个pdf文件合并成一个pdf文件?
  • 两个pdf合并成一个pdf 如何将多个pdf文件合并成一个pdf文件?
  • 两个pdf合并成一个pdf 如何将多个pdf文件合并成一个pdf文件?

档案文件管理 档案内行人---档案管理分类

奥地利著名作家弗兰茨·卡夫卡有一句名言,叫做“一切存档!”这句话揭示了万物的终极状态。经过多年的侵蚀和时间的磨损,所有的噪音都会消失。即使是最辉煌最神圣的东西,也会被时间之剑打碎,简化成最纯粹的物质形式,重写成最简单的存在形式,也就是档案。 用心、用心、专注、专业、...

衡水某高中要求寒假“朝五晚十”穿校服上网课?教育局:正在起草禁止文件

  • 衡水某高中要求寒假“朝五晚十”穿校服上网课?教育局:正在起草禁止文件
  • 衡水某高中要求寒假“朝五晚十”穿校服上网课?教育局:正在起草禁止文件
  • 衡水某高中要求寒假“朝五晚十”穿校服上网课?教育局:正在起草禁止文件

pdf怎样转换成word文档 怎么快速把pdf文件转换成word文档?

  • pdf怎样转换成word文档 怎么快速把pdf文件转换成word文档?
  • pdf怎样转换成word文档 怎么快速把pdf文件转换成word文档?
  • pdf怎样转换成word文档 怎么快速把pdf文件转换成word文档?

pdf转化为word软件 怎么快速把pdf文件转换成word文档?

  • pdf转化为word软件 怎么快速把pdf文件转换成word文档?
  • pdf转化为word软件 怎么快速把pdf文件转换成word文档?
  • pdf转化为word软件 怎么快速把pdf文件转换成word文档?

图片转换成excel文件 在线将Excel表格转换成JPG图片格式

  • 图片转换成excel文件 在线将Excel表格转换成JPG图片格式
  • 图片转换成excel文件 在线将Excel表格转换成JPG图片格式
  • 图片转换成excel文件 在线将Excel表格转换成JPG图片格式