知识大全 构建可反转排序泛型字典类(2)--排序方向

Posted 负数

篇首语:走路不怕上高山,撑船不怕过险滩。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 构建可反转排序泛型字典类(2)--排序方向相关的知识,希望对你有一定的参考价值。

   排序方向

  你希望ReversibleSortedList类中的元素是以TKey(键)的顺序进行存储的 并且它即可以从小排到大 也可以从大排到小 当然 最佳方式就是在添加元素时找到合适的位置插入 插入后元素就已经按顺序排好 在一个有序数组中查找合适的插入点这样的算法并不困难 但FCL已经帮我们实现了 而且是采用速度最快的二分查找法(在MSDN中被称为 二进制搜索法 ) 太棒了!它就是 静态方法Array BinarySearch 下面我们来看MSDN中对它的介绍

  Array BinarySearch一共有 个重载版本 最后一个是我们需要的

  public static int BinarySearch (T[] array //要搜索的从零开始的一维排序 Arrayint index //要搜索的范围的起始索引 int length //要搜索的范围的长度 T value //要搜索的对象 IComparer parer //比较元素时要使用的 IComparer 实现 )

  其中 T表示数组元素的类型 对返回值的介绍是 如果找到 value 则为指定 array 中的指定 value 的索引 如果找不到 value 且 value 小于 array 中的一个或多个元素 则为一个负数 该负数是大于 value 的第一个元素的索引的按位求补 如果找不到 value 且 value 大于 array 中的任何元素 则为一个负数 该负数是最后一个元素的索引加 的按位求补

  我们的ReversibleSortedList不能插入重复的键值 当返回值大于或等于 时 表明不能插入 当返回值小于零时 表明没有找到重复键 而且这时返回值还带有插入位置的信息 考虑得可真周到啊 赞一个!

  求补是什么呢?就是把二进制数的 变成 变成 对于int来说 由于它是有符号整数 求补会把正数变为负数 把负数变为正数 对一个数进行两次求补运算就会得到原来的数 哈哈 如果反回值小于 对它求补就可以得到插入位置信息了 真是得来全不费工夫!

  现在的问题是需要一个实现了IComparer接口的类 可以在ReversibleSortedList声明一个嵌套类以解决这个问题 当然 在实现IComparer接口的Compare方法时在里面做些手脚就可以实现正向和反向排序了 这时需要一个能表示正向和反向排序的东西 FCL里有现成的 它就是System ComponentModel命名空间下的 ListSortDirection枚举 它有两个值 Ascending表示升序 Descending表示降序 下面的代码在 版本的基础上添加了实现IComparer接口的内部类 SortDirectionComparer 代码可直接拷贝运行 运行它纯粹是为了检查是否有错误 没有什么看得见的效果

  ReversibleSortedList 版本 添加了实现IComparer接口的内部类

  using System;using System Collections;using System Collections Generic;using System ComponentModel;

cha138/Article/program/net/201311/13714

相关参考

知识大全 js函数排序的实例代码

这篇文章介绍了js函数排序的代码有需要的朋友可以参考一下 复制代码代码如下:varas=[];assort();//这个排序是按照字典排序//自定义按照数字排序functionsortByN

知识大全 数据结构考研分类复习真题 第十章 排序[35]

  .在执行某种排序算法的过程中出现了排序码朝着最终排序序列相反的方向移动从而认为该排序算法是不稳定的这种说法对吗?为什么?【燕山大学三(分)】  .设有个互不相同的元素abcde能否通过次比较就将其

知识大全 第六部分 内部排序[3]

   希尔排序    希尔排序(ShellsSort)又称缩小增量排序是一种插入排序类的方法但在时间效率上有较大的改进    voidShellInsert(SqList

知识大全 数据结构考研分类复习真题 第十章 答案[2]

  二判断题  √××××××××××××√√×××××××××√×√×××√  部分答案解释如下  错误例如冒泡排序是稳定排序将按冒泡排序排成升序序列第一趟变成此时就朝向最终位置的相反方向移动  错

知识大全 数据结构 10.7 起泡排序

  希赛教育计算机专业考研专业课辅导招生  希赛教育计算机专业考研专业课辅导视频  希赛教育计算机考研专业课在线测试系统  起泡排序是交换类排序方法中的一种简单排序方法其基本思想为依次比较相邻两个记录

知识大全 交换排序之快速排序

快速排序  快速排序(QuickSort)通过一趟排序将待排记录分割成独立的两部分其中一部分记录的关键字均比另一部分记录的关键字小则可分别对这两部分记录继续进行排序以达到整个序列有序快速排序三个步骤 

知识大全 排序之归并排序

  归并排序(MergeSort)是利用归并技术来进行排序  归并是将两个或多个有序表进行合并得到一个新的有序表  二路归并排序假设初始序列含有n个记录则可看成是n个有序的子序列再两两归并……如此重复

知识大全 数据结构考研分类复习真题 第十章 排序[22]

  中序周游(遍历)平衡的二叉排序树可得到最好排序的关键码序列(   )【中山大学一(分)】  .外部排序是把外存文件调入内存可利用内部排序的方法进行排序因此排序所花的时

知识大全 php 地区分类排序算法

本篇文章是对使用php实现地区分类排序算法进行了详细的分析介绍需要的朋友参考下   写一个函数将数据$array=array(=>array("""河北")=>array("""

知识大全 第六部分 内部排序[2]

   (二)插入排序    直接插入排序    voidInsertSort(Sqlist&L)//对顺序表L作直接插入排序  for(i=;i<=Llen