list排序

CMyListCtrl

谁说胖子不能爱 提交于 2019-12-07 15:17:35
1. MyListCtrl.h #pragma once #include <vector> #include "resource.h" // CMyListCtrl #ifdef DLL_IMPLEMENT #define DLL_API __declspec(dllexport) #else #define DLL_API __declspec(dllimport) #endif typedef unsigned int UINT; #define ID_LIST_SET_FONT 1001 #define ID_LIST_SAVE_ALL 1002 class DLL_API CMyListCtrl : public CListCtrl { struct SColumn { UINT index, order, width; TCHAR name[128]; }; std::vector<SColumn> m_vecColumn; COLORREF m_clrFore, m_clrBack; CFont m_font; CString m_strCfgFileName; int m_nSortCol;//排序列的索引,-1表示无排序列 bool m_bAscent;//true:升序 false:降序 CImageList m_imgList;//列表头的排序图标

排序算法:直接插入排序

北战南征 提交于 2019-12-06 22:28:09
直接插入排序是一种最简单的 插入排序 。 插入排序 :每一趟将一个待排序的记录,按照其关键字的大小插入到有序队列的合适位置里,知道全部插入完成。 在讲解直接插入排序之前,先让我们脑补一下我们打牌的过程。 先拿一张5在手里, 再摸到一张4,比5小,插到5前面, 摸到一张6,嗯,比5大,插到5后面, 摸到一张8,比6大,插到6后面, 。。。 最后一看,我靠,凑到全是同花顺,这下牛逼大了。 以上的过程,其实就是典型的 直接插入排序,每次将一个新数据插入到有序队列中的合适位置里。 很简单吧,接下来,我们要将这个算法转化为编程语言。 假设有一组无序序列 R0, R1, … , RN-1。 (1) 我们先将这个序列中下标为 0 的元素视为元素个数为 1 的有序序列。 (2) 然后,我们要依次把 R1, R2, … , RN-1 插入到这个有序序列中。所以,我们需要一个 外部循环 ,从下标 1 扫描到 N-1 。 (3) 接下来描述插入过程。假设这是要将 Ri 插入到前面有序的序列中。由前面所述,我们可知,插入Ri时,前 i-1 个数肯定已经是有序了。 所以我们需要将Ri 和R0 ~ Ri-1 进行比较,确定要插入的合适位置。这就需要一个 内部循环 ,我们一般是从后往前比较,即从下标 i-1 开始向 0 进行扫描。 核心代码 public void insertSort(int[] list)

排序算法:二分法插入排序

ε祈祈猫儿з 提交于 2019-12-06 22:27:45
二分法插入排序: 在上一篇文章 排序算法:插入排序 中,介绍了插入排序。其中,插入排序的“插入”二字体现于在寻找有序区间[R0,Ri-1]内第一个比Ri小的Rx,然后将Ri插入Rx之后,如果Ri>Ri-1,那正好,Ri不需要再与有序区间的其他元素比较。 二分法插入排序沿用了插入排序的思路,而且由于[R0,Ri-1]是有序序列,在寻找Ri的插入位置时,可以采用二分查找法搜索有序区间中比第一个Ri小的元素,这样就减少了比较次数,提高了插入排序算法的性能。 以长度为6的序列 {6,3,5,4,1,2} 的二分法插入排序过程做示范: 第一趟排序:[3 6] 5 4 1 2 (3插入6之前) 第二趟排序:[3 5 6] 4 1 2 (5插入6之前) 第三趟排序:[3 4 5 6] 1 2 (4插入5之前) 第四趟排序:[1 3 4 5 6] 2 (1插入3之前) 第五趟排序:[1 2 3 4 5 6] (2插入3之前) (注:用中括号括起来的是有序区间,之后的元素序列为待排区间) 可以看见二分法插入的排序过程和插入排序的过程是一摸一样的,但是其中寻找插入位置的过程是不一样的。 用第5趟排序过程作详细介绍第5趟排序过程需要寻找R5,即2的插入位置: 第五趟排序前的序列:[1 3 4 5 6] 2 首先,定义右边界right为R4,值为6,左边界为R0,值为1。[R0,R4]的中间元素为R(4

Python排序算法:插入排序

烈酒焚心 提交于 2019-12-06 22:27:16
什么是插入排序 代码实现 解析 优化插入排序 补小知识点 range()函数 & 和 and 什么是插入排序 插入排序(Insertion Sort)是一种简单直观的排序算法。 通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。 插入排序在实现上,在从后向前的扫描过程中,需要把 已排序元素逐步向后挪位 ,为最新元素提供插入空间。 插入排序动图 : (用MD写的,插入的动图貌似是不会动了。。。。) 从第二位开始,依次和前面的数进行比较,第一位默认已经是有序的了; 第三位和前两位依次比较,第四位和前三位依次比较; 前面的元素均为有序,后面为无序; 即: 先将前两个排序 再将前三个排序 前四个 … 一直到最末尾 代码实现 def insertion_sort (list) : n = len(list) for i in range( 1 ,n): for j in range(i, 0 ,- 1 ): if list[j] < list[j- 1 ]: list[j],list[j- 1 ] = list[j- 1 ],list[j] else : break return list 解析 def insertion_sort (list) : n = len(list) for i in range( 1 ,n): 首先,得到数据的长度后,开始从 1

freemarker(二) 常用内置函数

我怕爱的太早我们不能终老 提交于 2019-12-06 15:21:38
freemarker 常用内置函数 1。在模板里边 变量引用使用: ${a}, 如果给<#macro aa tmp=a > 这不需要 $, 可以给模板注入一些自定义的函数 ,这个比较常用. ======================= 接下来 将网上一些 内置函数 记录下来 一、Sequence的内置函数 1.sequence?first 返回sequence的第一个值。 2.sequence?last 返回sequence的最后一个值。 3.sequence?reverse 将sequence的现有顺序反转,即倒序排序 4.sequence?size 返回sequence的大小 5.sequence?sort 将sequence中的对象转化为字符串后顺序排序 6.sequence?sort_by(value) 按sequence中对象的属性value进行排序 注意:Sequence不能为null 二、Hash的内置函数 1.hash?keys 返回hash里的所有key,返回结果为sequence 2.hash?values 返回hash里的所有value,返回结果为sequence 三、操作字符串函数 1.substring(start,end)从一个字符串中截取子串 start:截取子串开始的索引,start必须大于等于0,小于等于end end: 截取子串的长度

C#基础提升系列——C#集合

混江龙づ霸主 提交于 2019-12-06 13:48:40
C#集合 有两种主要的集合类型:泛型集合和非泛型集合。 泛型集合被添加在 .NET Framework 2.0 中,并提供编译时类型安全的集合。 因此,泛型集合通常能提供更好的性能。 构造泛型集合时,它们接受类型形参;并在向该集合添加项或从该集合删除项时无需在Object类型间来回转换。 集合接口和类型 System.Array :用于数组,提供创建,操作,搜索和排序数组的方法,是所有数组的基类。 System.Collections :是 ArrayList 、 Queue 、 Hashtable 等基类,包含定义对象的各种集合。 System.Collections.Concurrent :提供了线程安全的集合类。 System.Collections.Generic :包含接口和定义泛型集合,它允许用户创建强类型集合能提供比非泛型强类型集合更好的类型安全和性能等级。 System.Collections.Specialized :包含强类型集合。专用于特定类型的集合类。 System.Collections.Immutable :包含了定义不可变的集合接口和类 。 列表 List<T> 该类派生自如下接口和类: public class List<T> : System.Collections.Generic.ICollection<T>, System

集合详解

痴心易碎 提交于 2019-12-06 08:33:19
集合是存放对象的引用的容器。 集合 = 数组/其他内存结构 + 可变长度 + 一堆方法 + 简单操作。 集合类型主要有3种: set、list和map 。 | | | |------>HashSet | | |->Set-----|------>TreeSet | | | |------>LinkedHashSet 自己了解 | | | | | Collection------| |------>ArrayList | | |->List----|------>Vector 自己了解 | | |------>LinkedList 自己了解 | |_______________________________________________________________________________| | | | |------>HashMap | | Map--------------------->Map----|------>TreeMap | | |------>Hashtable 自己了解 | 1.Set list基本操作:Collection接口声明了Set接口、List接口的通用方法 1.1 boolean add(Object o);向集合中添加数据 1.2从集合中取数据 2.1list.get(i);//取list集合的i+1个对象 2.2 Iterator

Java 8 中的 Streams API 详解

杀马特。学长 韩版系。学妹 提交于 2019-12-06 07:08:33
为什么需要 Stream Stream 作为 Java 8 的一大亮点,它与 java.io 包里的 InputStream 和 OutputStream 是完全不同的概念。它也不同于 StAX 对 XML 解析的 Stream,也不是 Amazon Kinesis 对大数据实时处理的 Stream。Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作(aggregate operation),或者大批量数据操作 (bulk data operation)。Stream API 借助于同样新出现的 Lambda 表达式,极大的提高编程效率和程序可读性。同时它提供串行和并行两种模式进行汇聚操作,并发模式能够充分利用多核处理器的优势,使用 fork/join 并行方式来拆分任务和加速处理过程。通常编写并行代码很难而且容易出错, 但使用 Stream API 无需编写一行多线程的代码,就可以很方便地写出高性能的并发程序。所以说,Java 8 中首次出现的 java.util.stream 是一个函数式语言+多核时代综合影响的产物。 什么是聚合操作 在传统的 J2EE 应用中,Java 代码经常不得不依赖于关系型数据库的聚合操作来完成诸如: 客户每月平均消费金额 最昂贵的在售商品 本周完成的有效订单

06-集合框架

只谈情不闲聊 提交于 2019-12-06 06:34:09
集合框架 一、Collection集合 集合:Java中提供的一种容器,用来存储多个数据。Collection是单列集合类的根接口。 集合和数组的区别: 1.数组的长度是固定。集合的长度是可变的。 2.数组中存储的是同一类型元素,可以存储基本数据类型值。集合存储的都是对象。而且对象的类型可以 不一致。 Collection常用功能 public boolean add(E e) : 把给定的对象添加到当前集合中 。 public void clear() :清空集合中所有的元素。 public boolean remove(E e) : 把给定的对象在当前集合中删除。 public boolean contains(E e) : 判断当前集合中是否包含给定的对象。 public boolean isEmpty() : 判断当前集合是否为空。 public int size() : 返回集合中元素的个数。 public Object[] toArray() : 把集合中的元素,存储到数组中。 Iterator迭代器 原理: ​ 首先通过调用t集合的iterator()方法获得迭代器对象,然后使用hashNext()方法判断集合中是否存在下一个元素,如果存在,则调用next()方法将元素取出,否则说明已到达了集合末尾,停止遍历元素。 ​ Iterator迭代器对象在遍历集合时

44444

随声附和 提交于 2019-12-06 06:27:02
集合框架 一、Collection集合 集合:Java中提供的一种容器,用来存储多个数据。Collection是单列集合类的根接口。 集合和数组的区别:1.数组的长度是固定。集合的长度是可变的。2.数组中存储的是同一类型元素,可以存储基本数据类型值。集合存储的都是对象。而且对象的类型可以 不一致。 Collection常用功能 public boolean add(E e) : 把给定的对象添加到当前集合中 。public void clear() :清空集合中所有的元素。public boolean remove(E e) : 把给定的对象在当前集合中删除。public boolean contains(E e) : 判断当前集合中是否包含给定的对象。public boolean isEmpty() : 判断当前集合是否为空。public int size() : 返回集合中元素的个数。public Object[] toArray() : 把集合中的元素,存储到数组中。 Iterator迭代器 原理: 首先通过调用t集合的iterator()方法获得迭代器对象,然后使用hashNext()方法判断集合中是否存在下一个元素,如果存在,则调用next()方法将元素取出,否则说明已到达了集合末尾,停止遍历元素。 ​ Iterator迭代器对象在遍历集合时