当前位置: 首页 > 编程日记 > 正文

C#对象数组排序方法

一个排序的类,用了几种方式实现的。

using System;
  
namespace DataStruct
{
   
public class Sorter
   {

   
/// <summary>
   
/// 冒泡排序法1
   
/// </summary>
       /*
         (1)对于数组list中的1至n个数据,先将第1个和第2个数据进行比较,然后比较第2个和第3个数据;
         依次类推,直到第n-1个数据和第n个数据进行比较交换,这称为一趟冒泡。
         这一趟最明显的效果是:将最小的数据传到了第1位。由此还可推断出,对于n个数,一趟应该进行n-1 次比较操作;
       
         (2)然后,对2至n个数据进行同样操作,则具有次小值的数据被安置在第2位上。
         (3)重复以上过程,每次的移动都向最终排序的目标前进,直至没有数据需要
 交换为止。
         这种排序的方法被形象地比喻成“冒泡”,在排序过程中,小的数就如气泡一
 般逐层上冒,而大的数逐个下沉。 
       
*/
       
/// <param name="list"></param>
  public static void BubbleSort(int[] list)
  {
      
for (int i = 0; i < list.Length; i++)
      {
          
for (int j = 0; j < list.Length - i - 1; j++)     //一趟排序开始
          
//也可以使用for (int j = 0; j < list.Length - 1; j++) 这样会多几次swap
          {
              
if (list[j] < list[j + 1])
              {
                  
int temp = list[j];   //交换开始
                  list[j] = list[j + 1];
                  list[j 
+ 1= temp;       //交换结束
              }
          }                                             
//一趟排序结束
      }
  }

  
/// <summary>
  
/// 冒泡排序法2
  
/// </summary>
  
/// <param name="list"></param>
  public static void BubbleSort2(int[] list)
  {
      
for (int i = 1; i < list.Length; i++//进行n-1次比较操作
      {
          
for (int j = 0; j < list.Length - 1; j++)     //一趟排序开始
          {
              
if (list[j] < list[j + 1])
              {
                  
int temp = list[j];   //交换开始
                  list[j] = list[j + 1];
                  list[j 
+ 1= temp;       //交换结束
              }
          }                                             
//一趟排序结束
      }
  }
 
  
/// <summary>
  
/// 插入排序法
  
/// </summary>
  
/// <param name="list"></param>
  public static void InsertionSort(int[] list)
  {
      
for (int i = 1; i < list.Length; i++)
      {
          
int t = list[i];
          
int j = i;
          
while ((j > 0&& (list[j - 1> t))
          {
              list[j] 
= list[j - 1];
              
--j;
          }
          list[j] 
= t;
      }
  }
 
  
/// <summary>
  
/// 选择排序法
  
/// </summary>
  
/// <param name="list"></param>
  public static void SelectionSort(int[] list)
  {
      
int min;
      
for (int i = 0; i < list.Length - 1; i++)
      {
          min 
= i;
          
for (int j = i + 1; j < list.Length; j++)
          {
              
if (list[j] < list[min])
              min 
= j;
          }
          
int t = list[min];
          list[min] 
= list[i];
          list[i] 
= t;
      }
  }
 
  
/// <summary>
  
/// 希尔排序法
  
/// </summary>
  
/// <param name="list"></param>
  public static void ShellSort(int[] list)
  {
      
int inc;
      
for (inc = 1; inc <= list.Length / 9; inc = 3 * inc + 1) ;
      
for (; inc > 0; inc /= 3)
      {
          
for (int i = inc + 1; i <= list.Length; i += inc)
          {
              
int t = list[i - 1];
              
int j = i;
              
while ((j > inc) && (list[j - inc - 1> t))
              {
                  list[j 
- 1= list[j - inc - 1];
                  j 
-= inc;
              }
              list[j 
- 1= t;
          }
      }
  }
 
  
private static void Swap(ref int l, ref int r)
  {
      
int s;
      s 
= l;
      l 
= r;
      r 
= s;
  }

 
/// <summary>
 
/// 快速排序法
 
/// </summary>
 
/// <param name="list"></param>
 
/// <param name="low"></param>
 
/// <param name="high"></param>
 public static void Sort(int[] list, int low, int high)
 {
     
int pivot;
     
int l, r;
     
int mid;
     
if (high <= low)
     
return;
     
else if (high == low + 1)
     {
         
if (list[low] > list[high])
         Swap(
ref list[low], ref list[high]);
         
return;
     }
     mid 
= (low + high) >> 1;
     pivot 
= list[mid];
     Swap(
ref list[low], ref list[mid]);
     l 
= low + 1;
     r 
= high;
     
do
     {
         
while (l <= r && list[l] < pivot)
         l
++;
         
while (list[r] >= pivot)
         r
--;
         
if (l < r)
         Swap(
ref list[l], ref list[r]);
     } 
while (l < r);
     list[low] 
= list[r];
     list[r] 
= pivot;
     
if (low + 1 < r)
     Sort(list, low, r 
- 1);
     
if (r + 1 < high)
     Sort(list, r 
+ 1, high);
 }
    }
}


C#对象数组排序方法

排序是编程中常用的法算之一,排序的方法有很多种,下面介绍一种简单有效的排序方法,代码如下:
private bool isReverse = false;
private void Sort(PersonalNotificationEntity [] list,string key)
{
if ( isReverse )
{
Array.Reverse(list);
isReverse 
= false;
}

else
{
int len = list.Length;
Type type 
= typeof(PersonalNotificationEntity);
object [] keys = new object[len];
for(int i = 0 ; i < len ; i++)
{
keys[i] 
= type.InvokeMember(key,BindingFlags.GetField ,null,list[i],null);
}

Array.Sort(keys,list);
isReverse 
= true;
}

}

这里使用了Array.Sort()和Array.Reverse()方法对数据进行正/反排序,变量isReverse做为反排序的标志位
方法传入了2个参数,一个是要排序的对象数组list,一个是排序关键字key,即要对象的根据哪个属性或字段来进行排序(这个值是等于对象的属性/字段名)
type.InvokeMember()方法可以得到对象实例的属性/字段值,这里使用的是字段
在得到数组中的每一个要排序的字段值后,把这个字段值数组做为Array.Sort()方法的参数传入,Sort方法就会将对象数按这个字段的值进行排序。

转载于:https://www.cnblogs.com/trendline/archive/2008/03/20/1114749.html

相关文章:

Asp.net MVC 3 防止 Cross-Site Request Forgery (CSRF)原理及扩展 安全 注入

原理&#xff1a;http://blog.csdn.net/cpytiger/article/details/8781457 原文地址&#xff1a;http://www.cnblogs.com/wintersun/archive/2011/12/09/2282675.html Cross-Site Request Forgery (CSRF) 是我们Web站点中常见的安全隐患。 下面我们在Asp.net MVC3 来演示一下。…

Windows下安装Redis服务

2019独角兽企业重金招聘Python工程师标准>>> Redis是有名的NoSql数据库&#xff0c;一般Linux都会默认支持。但在Windows环境中&#xff0c;可能需要手动安装设置才能有效使用。这里就简单介绍一下Windows下Redis服务的安装方法&#xff0c;希望能够帮到你。 1、要安…

(C++)1022 D进制的A+B 除基取余法将10进制数换成给定进制数

#include<cstdio> //除基取余法 const int M 30;int main(){long long a,b,c;int D,ans[M2];scanf("%lld%lld%d",&a,&b,&D);cab;int num0;do{ans[num]c%D;c c/D;}while(c!0);for(int inum-1;i>0;i--){printf("%d",ans[i]);}return…

Linux zip-tar.gz 压缩解压

tar -zcvf /home/xahot.tar.gz /xahot tar -zcvf 打包后生成的文件名全路径 要打包的目录 例子&#xff1a;把/xahot文件夹打包后生成一个/home/xahot.tar.gz的文件。zip 压缩方法&#xff1a; 压缩当前的文件夹 zip -r ./xahot.zip ./* -r表示递归zip [参数] [打包后的文件名]…

Spring(ApplicationContextBeanFactory)

BeanFactory 才是 Spring 容器中的顶层接口。ApplicationContext 是它的子接口。 BeanFactory 和 ApplicationContext 的区别&#xff1a;创建对象的时间点不一样。 BeanFactory接口 spring的原始接口,针对原始接口的实现类功能较为单一.BeanFactory接口实现类的容器,特点是每次…

spoolsv.exe占CPU100% 的解决方法

spoolsv.exe占CPU100% 的解决方法spoolsv.exe是打印缓冲&#xff0c;没有打印机就关掉&#xff0c;有的话在打印时会占用很大内存。因为要打印的文件要转化格式。禁止Print spooler服务&#xff0c;如果用打印机&#xff0c;此方法不可行。  解决办法如下&#xff1a;1、在服…

(C++)1037 在霍格沃茨找零钱的两种解法

解法一 #include<cstdio> //十七个银西可(Sickle)兑一个加隆(Galleon)&#xff0c;二十九个纳特(Knut)兑一个西可 //1 G 17 S , 1 S 29 Kint main(){int g1,s1,k1,g2,s2,k2,g3,s3,k3;scanf("%d.%d.%d",&g2,&s2,&k2);//定价 scanf("%d.%d.%…

开发人员角色分析

开发人员角色分析&#xff1a; 开发人员Developers 主要包含以下角色&#xff1a; n 软件架构师Software Architect n 设计员Designer n 用户界面设计员User-Interface Designer n 数据库设计员 Database Designer n 实施员Implementer n …

php empty()和isset()的区别

在使用 php 编写页面程序时&#xff0c;我经常使用变量处理函数判断 php 页面尾部参数的某个变量值是否为空&#xff0c;开始的时候我习惯了使用 empty() 函数&#xff0c;却发现了一些问题&#xff0c;因此改用 isset() 函数&#xff0c;问题不再。 顾名思义&#xff0c;empty…

jmap 内存情况

2019独角兽企业重金招聘Python工程师标准>>> -dump dump堆到文件,format指定输出格式&#xff0c;live指明是活着的对象,file指定文件名 [rootlocalhost ~]# jmap -dump:live,formatb,filedump.hprof 187784 Dumping heap to /home/yxgly/dump.hprof ... Heap dump …

(C++)1021 个位数统计

#include<cstdio> #include<cstring>const int M 1000;int main(){char str[M1];int count[10]{0};//全部初始化为0 scanf("%s",str);int len strlen(str);int i;for(i0;i<len;i){count[str[i]-0];}for(i0;i<10;i){if(count[i]>0){printf(&qu…

TOJ--3456--数学题

这题 做出来真的好爽啊... it is cool although it is easy 虽然 已经是大概1 2点的事了 我拖到现在才写是因为------lol 终于赢一把了 --- 先贴下题目&#xff1a; touch me 嗯 我一开始 用的是 3重for 我以为32767的数据量 是很小的.... 结果 TLE。。 OK 那么 我们只能换…

firewalled centos7

zone绑定网卡 firewall-cmd --zoneinternal --add-interfaceens192 --permanent firewall-cmd --permanent --zoneinternal --add-rich-rule"rule family"ipv4" source address"192.168.10.0/24" accept" [rootbyos000 system]# firewall-cmd -…

为Delphi程序添加事件和事件处理器

在Delphi中&#xff0c;事件实际上是专门化的属性&#xff0c;它是一个过程&#xff08;procedure&#xff09;的指针。要添加事件&#xff0c;首先应在所定义的类中说明一个用来指向事件过 程的指针&#xff0c;该指针的作用是当事件一旦发生&#xff0c;就通过这个指针执行所…

(C++)1031 查验身份证 3难点+3注意点

#include<cstdio> #include<cstring> //难点1&#xff1a;检查前17位是否全为数字 //解决之道1&#xff1a;本来就不是整型数字&#xff0c;是字符数字&#xff0c;判断是否在0和9之间即可 //难点2&#xff1a;遇到一个X后&#xff0c;如果不想处理sum了该怎么办 /…

Perl时间处理函数

官方网址&#xff1a;http://search.cpan.org/~stbey/Date-Calc-6.3/lib/Date/Calc.pod#___top use Date::Calc qw(Days_in_YearDays_in_MonthWeeks_in_Yearleap_yearcheck_datecheck_timecheck_business_dateDay_of_YearDate_to_DaysDay_of_WeekWeek_NumberWeek_of_YearMonda…

Linux环境搭建 | 手把手教你安装Linux虚拟机

2019独角兽企业重金招聘Python工程师标准>>> 前言 作为一名Linux工程师&#xff0c;不管是运维、应用、驱动方向&#xff0c;在工作中肯定会需要Linux环境。想要获得Linux环境&#xff0c;一个办法就是将电脑系统直接换成Linux系统&#xff0c;但我们平常用惯了Wind…

企业的覆灭,我监视你的Exchange邮件!

现在很多企业都搭建ExchangeServer平台&#xff0c;一个用户包括Domain admins都是不允许查阅其他用户的邮件信息的&#xff01;殊不知作为Domain Admins权限用户可以经过精心的设置&#xff0c;可以达到浏览到其他用户邮件信息&#xff01; 转载于:https://www.cnblogs.com/al…

(C++)1002 写出这个数

#include<cstdio> #include<cstring>const int M 100; //用字符数组装输入 //定义变量&#xff0c;输出字符数组的长度 //对字符数组遍历求和 //对结果逐位输出汉语拼音 void hanzi(int i){switch(i){case 0:printf("ling");break;case 1:printf("…

IO复用之epoll系列

epoll是什么&#xff1f; epoll是Linux内核为处理大批量文件描述符而作了改进的poll&#xff0c;是Linux下多路复用IO接口select/poll的增强版本&#xff0c;它能显著提高程序在大量并发连接中只有少量活跃的情况下的系统CPU利用率。另一点原因就是获取事件的时候&#xff0c;它…

MVP Summit 2008 照片纪实(二)- 旧金山,Google总部和Stanford大学

坐在洛杉矶机场里&#xff0c;终于为这次MVP峰会的美国之行画上了句号。从旧金山到拉斯维加斯&#xff0c;从拉斯维加斯到大峡谷&#xff0c;最后从大峡谷返回洛杉矶&#xff0c;3天之中总共驾驶历程超过1600英里&#xff08;据说可以赶上出租车司机了&#xff09;。3天之中经历…

(C++)1025 PAT Ranking

#include<cstdio> #include<algorithm> #include<cstring>using namespace std;const int M 100*300;struct testee{//考生 char reg_num[14];//准考证号 int score;//分数 int final_rank;//最终排名 int loc_no;//考场号 int local_rank;//考场内排名 }te…

模态视图(转)

转载请注明出处&#xff0c;原文网址&#xff1a;http://blog.csdn.net/m_changgong/article/details/8127894 作者&#xff1a;张燕广 模态视图不是专门的某个类&#xff0c;而是通过视图控制器的presentViewController方法弹出的视图&#xff0c;我们称为模态视图。 模态视图…

MHA二种高可用架构切换演练

高可用架构一 proxysqlkeepalivedmysqlmha优势&#xff0c;最大程序的降低脑裂风险&#xff0c;可以读写分离&#xff08;需要开启相应的插件支持&#xff09; 一、proxysql 1、安装 tar -zxvf proxysql.tar.gz -C /usr/local/chmod -R 700 /usr/local/proxysqlcd /usr/local/p…

如何关闭事件跟踪程序

最近经常遇到一些独享服务器用户反应自己的服务器联系万网工程师重起后&#xff0c;重新登陆时遇到的界面不知道该如何操作问题。当您看到此界面时&#xff0c;只需要在“注释”下面的空白处随意输入字符即可激活“确定”按钮&#xff0c;点击“确定”后可以进入系统。 这个界…

(C++)1015 德才论

#include<cstdio> #include<algorithm> #include<cstring> using namespace std; const int M 100000;struct Testee{char no[10];int de;int cai;int type;//第几类 }peo[M10];bool cmp(Testee a,Testee b){//比较顺序依次为总分&#xff0c;德分&#xf…

Vim命令相关

在shell中&#xff0c;记住一些常用的vim命令&#xff0c;会在操作时候事半功倍。 光标移动 h,j,k,l,h #表示往左&#xff0c;j表示往下&#xff0c;k表示往右&#xff0c;l表示往上 Ctrl f #上一页 Ctrl b #下一页 w, e, W, E #跳到单词的后面&#xff0c;小…

做科研的几点体会

刚刚开始做实验的时候&#xff0c;别人怎么说我就怎么做&#xff0c;每天在实验台旁干到深夜&#xff0c;以为这就是科研了。两个月过去&#xff0c;突然发现自己还在原地踏步。那种感觉&#xff0c;只能用”沮丧”来形 容。我开始置疑自己的行为和观念。感觉有种习惯的力量在束…

ICMP报文分析

一.概述&#xff1a;1. ICMP同意主机或路由报告差错情况和提供有关异常情况。ICMP是因特网的标准协议&#xff0c;但ICMP不是高层协议&#xff0c;而是IP层的协议。通常ICMP报文被IP层或更高层协议&#xff08;TCP或UDP&#xff09;使用。一些ICMP报文把差错报文返回给用户进…

(C++)1029 旧键盘

#include<cstdio> #include<cstring>const int M 80;//值得注意的地方是“按照发现顺序 ” //采取的最佳策略是&#xff0c;对于字符串1中的每一个字符&#xff0c;看在字符串2中是否出现int hashmap(char c){int res 0;if(0<c&&c<9){res c-0;}e…