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. 【Tarjan】【LCA】【动态规划】【推导】hdu6065 RXD, tree and sequence

    划分出来的每个区间的答案,其实就是连续两个的lca的最小值. 即5 2 3 4 这个区间的答案是min(dep(lca(5,2)),dep(lca(2,3),dep(lca(3,4)))). 于是dp ...

  2. 【数论】【中国剩余定理】poj1006 生理周期

    CRT用于求解一元线性同余方程组(模数互质),实际上模数不互质我们也可以解决,在之前的某篇文章里提过.如下 http://www.cnblogs.com/autsky-jadek/p/6596010. ...

  3. 20162325金立清 实验四 Android程序设计 实验报告

    实验四 Android程序设计 实验报告 代码托管地址 码云链接 实验内容 安装使用Android Stuidio Activity测试 UI测试 布局测试 事件处理测试 Android程序设计-1 ...

  4. Python的函数参数和递归参数

    位置参数 def power(x): return x*x; 默认参数 指的是在函数定义的时候,就赋予一些参数默认值,在调用这个函数的时候不必多次传入重复的参数值. 如定义一个多次输出同一个年龄阶段和 ...

  5. NOI 二分算法练习

    1.NOI 二分法求函数的零点 总时间限制:  1000ms 内存限制:  65536kB 描述 有函数: f(x) = x5 - 15 * x4+ 85 * x3- 225 * x2+ 274 * ...

  6. GMT-CMSP系统维护步骤整理

    一.关闭前端各服务1.北京代理,韩国代理节点nginx/etc/init.d/nginx stop2.关闭WEB1,WEB2 NGINX和PHPpkill nginx && pkill ...

  7. 打印出C# 中float ,double 在内存中的存放形式

    float floatA = 2.2f; ); ; i < ;++i ) { uint temp = 0x80000000 & (a << i); ) { Console.W ...

  8. java锁对象

    在Java5中,专门提供了锁对象,利用锁可以方便的实现资源的封锁,用来控制对竞争资源并发访问的控制,这些内容主要集中在java.util.concurrent.locks 包下面,里面有三个重要的接口 ...

  9. UITabBarControlller 和 UINavigationController

  10. Traefik访问master节点不通的问题定位

    问题 部署traefik到客户节点的对外访问节点后,发现日志里面报错 类似于 E0122 :: reflector.go:] k8s.io/dns/vendor/k8s.io/client-go/to ...