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条最大的数的更多相关文章

  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. 【找规律】计蒜客17118 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 E. Maximum Flow

    题意:一张有n个点的图,结点被编号为0~n-1,i往所有编号比它大的点j连边,权值为i xor j.给你n,问你最大流. 打个表,别忘了把相邻两项的差打出来,你会发现神奇的规律……你会发现每个答案都是 ...

  2. 【并查集】Gym - 101128B - Black Vienna

    有26张牌(A~Z),其中三张被拿走了.其余23张被分发给了两个人.给你m次调查结果,一次调查结果是对其中一个人询问一对牌,他会告诉你他有这对牌的几张(0~2).问你有多少种被拿走的牌的组合. 三重循 ...

  3. bzoj 2665: [cqoi2012]编号

    题目中说任意两个数至少要有3个位上数不相同,那么其实也就是从7个数中选出5个这样任意的组合全部不同,用数组f[i][j][k][l][m][n]记一下就好了,i为第几种组合,一共C(7,5)种,最后爆 ...

  4. Android:布局实例之模仿京东登录界面

    预览图及布局结构参考: 布局: <?xml version="1.0" encoding="utf-8"?> <RelativeLayout ...

  5. 模式匹配之Kmp算法

    Kmp: 算法定义借鉴wikipedia: http://en.wikipedia.org/wiki/Knuth%E2%80%93Morris%E2%80%93Pratt_algorithm#KMP_ ...

  6. 搭建maven支持的web工程的步骤

    搭建一个新的web project的整体思路:先用maven搭建项目的骨架,生成mvn project,然后将mvn project转换为web project,最后添加相关的Spring,hiber ...

  7. ajax跨域的解决方案

    前言 公司要做一个活动页面,在其过程中发现所有的接口,ajax请求跨域.这里对跨域做个简单介绍以及提供几种解决办法. 由于浏览器实现的同源策略的限制,XmlHttpRequest只允许请求当前源(域名 ...

  8. 从connect到express02-中间件morgan

    控制台输出请求日志 输出格式 默认格式: dev, combined, tiny等 自定义格式: morgan(':method :url :status :res[content-length] - ...

  9. Chrome下flash无法显示多个的问题。

    $(document).ready(function(){ if(window.navigator.appVersion.match(/Chrome/)) { jQuery('object').eac ...

  10. 【SQL Sever】安装过程

    下载了sql sever,如下: 首先把iso解压,如下: 1.点击 2.打开页面后 3. 接下来直接下一步下一步 完成之后,需要重启计算机才能使用! 4. 重启之后,进入配置工具 将所有的端口号更改 ...