• 数据结构系列-堆排序当中的T-TOK问题


    🌈个人主页:羽晨同学 

    💫个人格言:“成为自己未来的主人~”  

    之前我们讲到了堆排序的实现逻辑,那么接下来我们重点关注的就是其中的T-TOK问题

    T-TOK说简单点,就是说,假如有10000个数据(随机的),让你找到其中最大的10个数据,有什么快速的方法,遍历吗?这个是不显示的,效率是最低的

    所以,我们能想到的比较好的方法就是堆排序当中的T-TOK问题

    首先,我们传入100000

    1. #define _CRT_SECURE_NO_WARNINGS
    2. #include"Heap.h"
    3. void CreateNDate()
    4. {
    5. //造数据
    6. int n = 100000;
    7. srand(time(0));
    8. const char* file = "data.txt";
    9. FILD* fin = fopen(file, "w");
    10. if (fin == NULL)
    11. {
    12. perror("fopen error");
    13. return;
    14. }
    15. for (int i = 0; i < n; i++)
    16. {
    17. int x = (rand() + i) % 1000000;
    18. fprintf(fin, "%d\n", x);
    19. }
    20. fclose(fin);
    21. }
    22. void topk()
    23. {
    24. printf("请输入k: >");
    25. int k = 0;
    26. scanf("%d", &k);
    27. const char* file = "data.txt";
    28. FILE* fout = fopen(file, "r");
    29. if (fout == NULL)
    30. {
    31. perror("fopen error");
    32. return;
    33. }
    34. int val = 0;
    35. int* minheap = (int*)malloc(sizeof(int) * k);
    36. if (minheap == NULL)
    37. {
    38. perror("malloc fail");
    39. return;
    40. }
    41. for (int i = 0; i < k; i++)
    42. {
    43. fsanf(fout, "%d", &minheap[i]);
    44. }
    45. //建立k个数据的小堆
    46. for (int i = (k - 1 - 1) / 2; i > 0; i--)
    47. {
    48. AdjustDown(minheadp, k, i);
    49. }
    50. int x = 0;
    51. while (fscanf(fout, "%d", &x) != EOF)
    52. {
    53. //读取堆顶的数据
    54. if (x > minheap[0])
    55. {
    56. minheadp[0] = x;
    57. AdjustDown(minheap, k, 0);
    58. }
    59. for (int i = 0; i < k; i++)
    60. {
    61. printf("%d", minheap[i]);
    62. }
    63. fclose(fout);
    64. }
    65. }
    66. int main()
    67. {
    68. CreateNDate();
    69. topk();
    70. return 0;
    71. }

    在这个代码当中有几个比较厉害的点需要我们注意一下,首先在他的创建数据的那个阶段,我们使用了随机数,但是它那里进行了取余,这样的好处是将数字的范围控制在一个程度之内,可以检测自己的程序是否正确表达。

    接下来可能需要注意的就是相关文件的操作

     

     

     

  • 相关阅读:
    锁竞争导致的慢sql分析
    ffmpeg的部署踩坑及简单使用方式
    【SpringCloud微服务全家桶学习笔记-服务注册zookeeper/consul】
    基于GIS的生态安全网络格局构建(附练习数据下载)
    软考系统架构师倒计时第1天
    Docker 入门,学明白这一篇就够啦
    矩阵快速幂の模板
    高性价比的大带宽机器选哪里?泉州移动大带宽了解下
    文献阅读(207)FPGA HBM
    百度搜索引擎SEO优化方法
  • 原文地址:https://blog.csdn.net/in_seattle/article/details/138171315