C#对象数组排序方法

转载 2007年09月13日 13:02:00
#实现数组的排序

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

1using System;
2
3namespace DataStruct
4{
5 public class Sorter
6 {
7 /**//// <summary>
8 /// 冒泡排序法1
9 /// </summary>
10 /// <param name="list"></param>
11 public static void BubbleSort(int[] list)
12 {
13 for (int i = 0; i < list.Length; i++)
14 {
15 for (int j = i; j < list.Length; j++)
16 {
17 if (list[i] < list[j])
18 {
19 int temp = list[i];
20 list[i] = list[j];
21 list[j] = temp;
22 }
23 }
24 }
25 }
26
27 /**//// <summary>
28 /// 插入排序法
29 /// </summary>
30 /// <param name="list"></param>
31 public static void InsertionSort(int[] list)
32 {
33 for (int i = 1; i < list.Length; i++)
34 {
35 int t = list[i];
36 int j = i;
37 while ((j > 0) && (list[j - 1] > t))
38 {
39 list[j] = list[j - 1];
40 --j;
41 }
42 list[j] = t;
43 }
44
45 }
46
47 /**//// <summary>
48 /// 选择排序法
49 /// </summary>
50 /// <param name="list"></param>
51 public static void SelectionSort(int[] list)
52 {
53 int min;
54 for (int i = 0; i < list.Length - 1; i++)
55 {
56 min = i;
57 for (int j = i + 1; j < list.Length; j++)
58 {
59 if (list[j] < list[min])
60 min = j;
61 }
62 int t = list[min];
63 list[min] = list[i];
64 list[i] = t;
65 }
66
67 }
68
69 /**//// <summary>
70 /// 希尔排序法
71 /// </summary>
72 /// <param name="list"></param>
73 public static void ShellSort(int[] list)
74 {
75 int inc;
76 for (inc = 1; inc <= list.Length / 9; inc = 3 * inc + 1) ;
77 for (; inc > 0; inc /= 3)
78 {
79 for (int i = inc + 1; i <= list.Length; i += inc)
80 {
81 int t = list[i - 1];
82 int j = i;
83 while ((j > inc) && (list[j - inc - 1] > t))
84 {
85 list[j - 1] = list[j - inc - 1];
86 j -= inc;
87 }
88 list[j - 1] = t;
89 }
90 }
91 }
92
93 private static void Swap(ref int l, ref int r)
94 {
95 int s;
96 s = l;
97 l = r;
98 r = s;
99 }
100
101 /**//// <summary>
102 /// 快速排序法
103 /// </summary>
104 /// <param name="list"></param>
105 /// <param name="low"></param>
106 /// <param name="high"></param>
107 public static void Sort(int[] list, int low, int high)
108 {
109 int pivot;
110 int l, r;
111 int mid;
112 if (high <= low)
113 return;
114 else if (high == low + 1)
115 {
116 if (list[low] > list[high])
117 Swap(ref list[low], ref list[high]);
118 return;
119 }
120 mid = (low + high) >> 1;
121 pivot = list[mid];
122 Swap(ref list[low], ref list[mid]);
123 l = low + 1;
124 r = high;
125 do
126 {
127 while (l <= r && list[l] < pivot)
128 l++;
129 while (list[r] >= pivot)
130 r--;
131 if (l < r)
132 Swap(ref list[l], ref list[r]);
133 } while (l < r);
134 list[low] = list[r];
135 list[r] = pivot;
136 if (low + 1 < r)
137 Sort(list, low, r - 1);
138 if (r + 1 < high)
139 Sort(list, r + 1, high);
140 }
141 }
142}
143

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方法就会将对象数按这个字段的值进行排序。  


Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1531841


 

相关文章推荐

C#基础之数组排序,对象大小比较

从个小例子开始: int[] intArray = new int[]{2,3,6,1,4,5}; Array.Sort(intArray); Array.ForEach(intArray,(i)=...

C#自定义对象排序(数组/ArrayList)

http://www.cnblogs.com/irvinow/archive/2011/05/01/2033942.html

C#基础之数组排序,对象大小比较

C#基础之数组排序,对象大小比较

用C#实现对数组元素排序(Array.Sort)方法

siki老师出的又一道题目,刚看题目觉得有点难,其实想通了就不难了。 题目是:编写一个控制台程序,要求用户输入一组数字用空格间隔,对用户输入的数字从小到大输出。(Array.Sort方法和冒泡排序) ...

【C#基础知识】之结构、数组及常用的几种排序方法总结

一、结构: 为什么要用结构? 1、比如我们上课讲的为了存储一个人的信息,要声明一组变量。当我们要存储n个人的信息时,就比较麻烦要声明n组变量。 2、存储一个人的信息的这几个变量间没有关系,容易记...

javaScript中使用 sort方法根据数组中对象的某一个属性值进行排序

javaScript中使用 sort方法根据数组中对象的某一个属性值进行排序

C#中List或其它集合对象排序方法的一点理解

因为这个是老生常谈的话题了吧,所以过多的其它代码粘贴或拷贝就不做太多,只谈谈这段时间为了解决项目特别功能而用到的基础排序知识!          在项目中进行数据排序是非常常见的,所以今天做个备注,...
  • jetsu
  • jetsu
  • 2017-03-10 11:29
  • 370

.NET/C#中对自定义对象集合进行自定义排序的方法

一个集合可否排序,要看系统知不知道排序的规则,像内建的系统类型,int ,string,short,decimal这些,系统知道怎么排序,而如果一个集合里面放置的是自定义类型,比如自己定义了一个Car...

arraylist 对象 数组排序

  • 2014-11-24 17:42
  • 1.87MB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)