从1KW条数据中筛选出1W条最大的数
- using System;
- using System.Collections.Generic;
- using System.Diagnostics;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- namespace ConsoleApp3
- {
- class Program
- {
- static LinkedList<int> sortArrayLink = new LinkedList<int>();
- static void Main(string[] args)
- {
- //算法测试 在1KW条数据中取得最大的1W条
- //生成数据
- int[] randomInt = getRandomInt(10000000);
- int[] sortArray = randomInt.Take(10000).ToArray();
- randomInt = randomInt.Skip(10000).ToArray();
- sortArray = sortArray.OrderByDescending(u=>u).ToArray();
- var item= sortArrayLink.AddFirst(sortArray[0]);
- for (int i = 1; i < sortArray.Length; i++)
- //生成链表
- sortArrayLink.AddAfter(item,sortArray[i]);
- //开始排序
- Stopwatch watch = new Stopwatch();
- watch.Start();
- int rpCount = 0;
- foreach (var num in randomInt)
- {
- rpCount++;
- Insert(num);
- }
- watch.Stop();
- Console.WriteLine(watch.Elapsed);
- //foreach (var num in sortArrayLink)
- //{
- // Console.WriteLine(num);
- //}
- Console.ReadLine();
- }
- /// <summary>
- /// 获取指定长度的随机数据
- /// </summary>
- /// <param name="length"></param>
- /// <returns></returns>
- static int[] getRandomInt(int length) {
- //开始循环获取数据
- int[] randomInt = new int[length];
- for (int i = 0; i < length; i++)
- {
- Random r = new Random(i);
- randomInt[i] = r.Next(length);
- }
- return randomInt;
- }
- /// <summary>
- /// 尝试插入到排序数组
- /// </summary>
- /// <param name="sortArray">已经排序好的数组</param>
- /// <param name="insertNum">需要插入的数据</param>
- static void Insert(int insertNum) {
- var item = sortArrayLink.Last;
- if (insertNum < item.Value) return;
- var first = sortArrayLink.First;
- if (insertNum > first.Value)
- {
- sortArrayLink.AddBefore(first, insertNum);
- sortArrayLink.RemoveLast();//移除最后一个
- return;
- }
- if (insertNum == first.Value)
- {
- sortArrayLink.AddAfter(first, insertNum);
- sortArrayLink.RemoveLast();//移除最后一个
- return;
- }
- while (item.Next!= null)
- {
- if (item.Value < insertNum)
- {
- item = item.Next;
- continue;
- }
- sortArrayLink.AddAfter(item, insertNum);
- sortArrayLink.RemoveLast();//移除最后一个
- return;
- }
- }
- }
- }
i5下运行
不计算生成数据时间 耗时0.27S 内存占用227MB
从1KW条数据中筛选出1W条最大的数的更多相关文章
- sql 查询某个条件多条数据中最新的一条数据或最老的一条数据
sql 查询某个条件下多条数据中最新的一条数据或最老的一条数据 test_user表结构如下: 需求:查询李四.王五.李二创建的最初时间或者最新时间 1:查询最初的创建时间: SELECT * FRO ...
- insert 一条数据 然后拿出这条数据在数据库中生成的ID
[insert 一条数据 然后拿出这条数据在数据库中生成的ID] <insert id="insert" parameterType="management&quo ...
- 关于如何在mysql中插入一条数据后,返回这条数据的id
简单的总结一下如何在mysql中出入一条数据后,返回该条数据的id ,假如之后代码需要这个id,这样做起来就变得非常方便,内容如下: <insert id="insertAndGetI ...
- 南昌网络赛 Distance on the tree 主席树+树剖 (给一颗树,m次查询ui->vi这条链中边权小于等于ki的边数。)
https://nanti.jisuanke.com/t/38229 题目: 给一颗树,m次查询ui->vi这条链中边权小于等于ki的边数. #include <bits/stdc++.h ...
- 原!!mysql,几十万条数据中随机抽取1万以内的数据
想了几种方法: 1.将所有符合条件的对象集合都查出来,在代码里做随机. 2.先查出所有符合条件的id,再代码随机需要抽查数量的id,再 到数据库 中 in. 3.利用order by rand() l ...
- 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=}, ...
- 每次选中数组中的N条数据, 如果让每条数据被选中的次数做到平均??
经常有这样的需求, 有一组数据, 每次展示其中的1条或N条,希望每条数据展示量可以做到平均. 一开始想依次展示每条数据并做记录,整组数据全展示一遍之后清除记录, 然后一直循环下去. 实现的过程中又觉得 ...
- mysql 多条数据中,分组获取值最大的数据记录
摘要: 多条纪录中,几个字段相同,但是其中一个或者多个字段不同,则去该字段最大(这里只有一个不同) 源数据: 目的是移除:在同一天中只能存在一天数据,则取审核日期最大,数据库脚本如下: SELECT ...
- MySQL重复数据中限定操作n条
对于一个表,有时可能里面有很多重复的条,比如: +-----------+---------+| coupon_id | user_id |+-----------+---------+| 8 | 1 ...
随机推荐
- 【动态规划/递推】BZOJ1806[IOI2007]- Miners
IOI历史上的著名水题,我这种蒟蒻都能写的东西. [思路] 用1.2.3分别代替三种食物,0表示当前矿井没有食物.f[i][a][b][c][d]当前第i个食物,矿1的食物顺序由上至下为a,b:矿2的 ...
- TCP,UDP,IP总结
一.传输层的主要功能是什么? 分割并重新组装上层提供的数据流,为数据流提供端到端的传输服务. 二.传输层如何区分不同应用程序的数据流? 因为,对应传输层而言,它只需要知道目标主机上的哪个服务程序来响应 ...
- 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() ...
- Fork & vfork & clone (转载)
转自:http://blog.csdn.net/zqy2000zqy/archive/2006/09/04/1176924.aspx 进程是一个指令执行流及其执行环境,其执行环境是一个系统资源的集合, ...
- spring的@Async异步使用
pring的@Async功能,用的时候一定要注意: 1.异步方法和调用类不要在同一个类中. 2.xml里需要加入这一行 <task:annotation-driven/> 下面的可以直接粘 ...
- 在Oracle中利用SQL_TRACE跟踪SQL的执行
当你在执行一条SQL语句非常慢的时候,你是不是想问Oracle怎么执行这条语句的呢? Oracle提供的SQL_TRACE工具可以让你知道你执行的SQL究竟做了什么.执行的过程会被 输出到trace文 ...
- mybatis批量操作-xml方式
在实际项目中,我们一般都会用到批量insert.delete.update等操作,由于使用频率还是蛮高的,这里就做个简单的记录,供以后学习和参考. 批量insert 在数据库中,批量插入可以是多条in ...
- 万里长征第二步——django个人博客(第六步 ——添加富文本编辑器)
下载kindeditor 在admin.py文件中配置链接 class Media: js = ( '/static/js/kindeditor-4.1.10/kindeditor-min.js', ...
- Asp.net Core CORS(跨域资源共享)实验
环境:Asp.Net Core 2 1.问题 最近项目在调用远程UI时遇到点麻,在调用远程CSS文件时无法加载其中的字体文件.远程CSS文件对字体的定义: @font-face { font-fami ...
- Because, since, as, for
because, as, for, since这几个词都是表示“原因”的连词,语气由强至弱依次为:because→since→as→for;其中because, since, as均为从属连词,引导原 ...