C# 数组排序的方法

using System;
namespace DataStruct
{
public class Sorter
{
/// <summary>
/// 冒泡排序法1
/// </summary>
/// <param name="list"></param>

public static void BubbleSort( int [] list)
{
for ( int i = 0 ; i < list.Length; i ++ )
{
for ( int j = i; j < list.Length; j ++ )
{
if (list[i] < list[j])
{
int temp = list[i];
list[i]
= list[j];
list[j]
= 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>
/// <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方法就会将对象数按这个字段的值进行排序。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值