1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7.  
  8. namespace ConsoleApp3
  9. {
  10. class Program
  11. {
  12. static LinkedList<int> sortArrayLink = new LinkedList<int>();
  13. static void Main(string[] args)
  14. {
  15. //算法测试 在1KW条数据中取得最大的1W条
  16. //生成数据
  17. int[] randomInt = getRandomInt(10000000);
  18. int[] sortArray = randomInt.Take(10000).ToArray();
  19. randomInt = randomInt.Skip(10000).ToArray();
  20. sortArray = sortArray.OrderByDescending(u=>u).ToArray();
  21.  
  22. var item= sortArrayLink.AddFirst(sortArray[0]);
  23. for (int i = 1; i < sortArray.Length; i++)
  24. //生成链表
  25. sortArrayLink.AddAfter(item,sortArray[i]);
  26. //开始排序
  27. Stopwatch watch = new Stopwatch();
  28. watch.Start();
  29. int rpCount = 0;
  30.  
  31. foreach (var num in randomInt)
  32. {
  33. rpCount++;
  34. Insert(num);
  35. }
  36. watch.Stop();
  37. Console.WriteLine(watch.Elapsed);
  38. //foreach (var num in sortArrayLink)
  39. //{
  40. // Console.WriteLine(num);
  41. //}
  42. Console.ReadLine();
  43.  
  44. }
  45. /// <summary>
  46. /// 获取指定长度的随机数据
  47. /// </summary>
  48. /// <param name="length"></param>
  49. /// <returns></returns>
  50. static int[] getRandomInt(int length) {
  51. //开始循环获取数据
  52. int[] randomInt = new int[length];
  53. for (int i = 0; i < length; i++)
  54. {
  55. Random r = new Random(i);
  56. randomInt[i] = r.Next(length);
  57.  
  58. }
  59. return randomInt;
  60. }
  61. /// <summary>
  62. /// 尝试插入到排序数组
  63. /// </summary>
  64. /// <param name="sortArray">已经排序好的数组</param>
  65. /// <param name="insertNum">需要插入的数据</param>
  66. static void Insert(int insertNum) {
  67. var item = sortArrayLink.Last;
  68.  
  69. if (insertNum < item.Value) return;
  70. var first = sortArrayLink.First;
  71. if (insertNum > first.Value)
  72. {
  73. sortArrayLink.AddBefore(first, insertNum);
  74. sortArrayLink.RemoveLast();//移除最后一个
  75. return;
  76. }
  77. if (insertNum == first.Value)
  78. {
  79. sortArrayLink.AddAfter(first, insertNum);
  80. sortArrayLink.RemoveLast();//移除最后一个
  81. return;
  82.  
  83. }
  84. while (item.Next!= null)
  85. {
  86.  
  87. if (item.Value < insertNum)
  88. {
  89. item = item.Next;
  90. continue;
  91. }
  92. sortArrayLink.AddAfter(item, insertNum);
  93. sortArrayLink.RemoveLast();//移除最后一个
  94. return;
  95. }
  96.  
  97. }
  98. }
  99. }

  i5下运行

  不计算生成数据时间 耗时0.27S 内存占用227MB

从1KW条数据中筛选出1W条最大的数的更多相关文章

  1. sql 查询某个条件多条数据中最新的一条数据或最老的一条数据

    sql 查询某个条件下多条数据中最新的一条数据或最老的一条数据 test_user表结构如下: 需求:查询李四.王五.李二创建的最初时间或者最新时间 1:查询最初的创建时间: SELECT * FRO ...

  2. insert 一条数据 然后拿出这条数据在数据库中生成的ID

    [insert 一条数据 然后拿出这条数据在数据库中生成的ID] <insert id="insert" parameterType="management&quo ...

  3. 关于如何在mysql中插入一条数据后,返回这条数据的id

    简单的总结一下如何在mysql中出入一条数据后,返回该条数据的id ,假如之后代码需要这个id,这样做起来就变得非常方便,内容如下: <insert id="insertAndGetI ...

  4. 南昌网络赛 Distance on the tree 主席树+树剖 (给一颗树,m次查询ui->vi这条链中边权小于等于ki的边数。)

    https://nanti.jisuanke.com/t/38229 题目: 给一颗树,m次查询ui->vi这条链中边权小于等于ki的边数. #include <bits/stdc++.h ...

  5. 原!!mysql,几十万条数据中随机抽取1万以内的数据

    想了几种方法: 1.将所有符合条件的对象集合都查出来,在代码里做随机. 2.先查出所有符合条件的id,再代码随机需要抽查数量的id,再 到数据库 中 in. 3.利用order by rand() l ...

  6. EF GroupBy 根据key 分组 再把key求和(取决于每条数据中 arr的条数) arr 中有多少条数据 就把多少个key 加起来

    List<A> alist = new List<A>{ ,b=,c=,d=,e=}, ,b=,c=,d=,e=}, ,b=,c=,d=,e=}, ,b=,c=,d=,e=}, ...

  7. 每次选中数组中的N条数据, 如果让每条数据被选中的次数做到平均??

    经常有这样的需求, 有一组数据, 每次展示其中的1条或N条,希望每条数据展示量可以做到平均. 一开始想依次展示每条数据并做记录,整组数据全展示一遍之后清除记录, 然后一直循环下去. 实现的过程中又觉得 ...

  8. mysql 多条数据中,分组获取值最大的数据记录

    摘要: 多条纪录中,几个字段相同,但是其中一个或者多个字段不同,则去该字段最大(这里只有一个不同) 源数据: 目的是移除:在同一天中只能存在一天数据,则取审核日期最大,数据库脚本如下: SELECT ...

  9. MySQL重复数据中限定操作n条

    对于一个表,有时可能里面有很多重复的条,比如: +-----------+---------+| coupon_id | user_id |+-----------+---------+| 8 | 1 ...

随机推荐

  1. 【动态规划/递推】BZOJ1806[IOI2007]- Miners

    IOI历史上的著名水题,我这种蒟蒻都能写的东西. [思路] 用1.2.3分别代替三种食物,0表示当前矿井没有食物.f[i][a][b][c][d]当前第i个食物,矿1的食物顺序由上至下为a,b:矿2的 ...

  2. TCP,UDP,IP总结

    一.传输层的主要功能是什么? 分割并重新组装上层提供的数据流,为数据流提供端到端的传输服务. 二.传输层如何区分不同应用程序的数据流? 因为,对应传输层而言,它只需要知道目标主机上的哪个服务程序来响应 ...

  3. In c++ access control works on per-class basis not on per-object basis.

    #ifndef MYTIME_H #define MYTIME_H class MyTime { private: int m_hour; int m_minute; public: MyTime() ...

  4. Fork & vfork & clone (转载)

    转自:http://blog.csdn.net/zqy2000zqy/archive/2006/09/04/1176924.aspx 进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合, ...

  5. spring的@Async异步使用

    pring的@Async功能,用的时候一定要注意: 1.异步方法和调用类不要在同一个类中. 2.xml里需要加入这一行 <task:annotation-driven/> 下面的可以直接粘 ...

  6. 在Oracle中利用SQL_TRACE跟踪SQL的执行

    当你在执行一条SQL语句非常慢的时候,你是不是想问Oracle怎么执行这条语句的呢? Oracle提供的SQL_TRACE工具可以让你知道你执行的SQL究竟做了什么.执行的过程会被 输出到trace文 ...

  7. mybatis批量操作-xml方式

    在实际项目中,我们一般都会用到批量insert.delete.update等操作,由于使用频率还是蛮高的,这里就做个简单的记录,供以后学习和参考. 批量insert 在数据库中,批量插入可以是多条in ...

  8. 万里长征第二步——django个人博客(第六步 ——添加富文本编辑器)

    下载kindeditor 在admin.py文件中配置链接 class Media: js = ( '/static/js/kindeditor-4.1.10/kindeditor-min.js', ...

  9. Asp.net Core CORS(跨域资源共享)实验

    环境:Asp.Net Core 2 1.问题 最近项目在调用远程UI时遇到点麻,在调用远程CSS文件时无法加载其中的字体文件.远程CSS文件对字体的定义: @font-face { font-fami ...

  10. Because, since, as, for

    because, as, for, since这几个词都是表示“原因”的连词,语气由强至弱依次为:because→since→as→for;其中because, since, as均为从属连词,引导原 ...