From 《编程珠玑》:一个文件中至多包含n个不重复的正整数,每个正整数都小于n,这里n=10^7。要求:以增量的形式输出经排序后的整数(限用1M内存)。

思路1:1M内存大约可以存储250000个整数。因此我们可以对输入文件遍历40次,第一次遍历过程中将值大于0、小于249999的所有整数读入内存,然后进行快速排序,再写入目标文件;第二次遍历过程中将值大于250000、小于499999的所有整数读入内存,排完序后写入目标文件,后面依此类推;第40次遍历过程中将大于9750000、小于9999999的所有整数读入内存,排完序后写入目标文件。此时目标文件中的整数已按增量排完序,顺序输出即可。

思路2:系统排序
(Command命令行)>sort originalFileName.ext >> targetFileName.ext

思路3:位图数据结构。

排序文件中的N个不重复的正整数#define bitSperWord 32
排序文件中的N个不重复的正整数
#define shift 5
排序文件中的N个不重复的正整数
#define mask 0x1f
排序文件中的N个不重复的正整数
#define N 10000000
排序文件中的N个不重复的正整数
int a[1+N/bitSperWord];
 mask));}

 

 


如果不限内存,还可以使用下面两种排序方法:
思路1:C++/STL

排序文件中的N个不重复的正整数int mail(void)
}

 

思路2:C/qsort

排序文件中的N个不重复的正整数int intcomp(int *x,int *y)
 



相关文章:

  • 2021-11-02
  • 2022-12-23
  • 2022-03-08
  • 2021-10-14
  • 2021-07-14
  • 2022-12-23
  • 2022-12-23
  • 2021-08-29
猜你喜欢
  • 2021-12-04
  • 2021-08-07
  • 2022-12-23
  • 2022-01-16
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案