• 数据结构系列-堆排序当中的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. }

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

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

     

     

     

  • 相关阅读:
    gitlab 服务端 hook, 拦截糟糕的提交到仓库
    C++day6
    神经网络 深度神经网络,深度神经网络工作原理
    什么是langchain
    数据结构概念部分
    【Flutter -- 基础组件】单选开关(Switch)& 单选框(Radio) & 复选框(Checkbox)
    Python列表:灵活与高效的数据结构
    Cypress环境变量
    ROS功能包编译报错fatal error: xxxxConfig.h: 没有那个文件或目录的解决方法及原理介绍
    【21天学习挑战赛】Python学习第三篇:os 标准库
  • 原文地址:https://blog.csdn.net/in_seattle/article/details/138171315