C#对象数组排序方法
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 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
C#对象数组排序方法相关推荐
- Javascript Array对象 sort()方法,记忆方法,方法扩展
相信 有很多 同仁们,尤其是初学者,在记住 Array对象 sort() 方法的排序,规则上,有点困难: 其实sort()方法已经在实际工作中用到很多遍了,可当我仔细推敲,这个sort()方法,什么时 ...
- javascript按照期望的顺序给对象数组排序,中文汉字大写数字排序
javascript按照期望的顺序给对象数组排序,中文汉字大写数字排序.这种方法也可用到sql语句中. var arrayExpected = ['一年级', '二年级', '三年级', '四年级', ...
- php排序数组排序_PHP常见数组排序方法小结
本文实例讲述了PHP常见数组排序方法. 一.数组操作的基本函数 数组的键名和值 array_values($arr); 获得数组的值 array_keys($arr); 获得数组的键名 array_f ...
- #JavaScript#对象数组排序、数组裁剪
问题描述:有一个对象数组,该对象有个属性level,值可能为"重要"."中等"."普通",从后端获取这个对象数组后,需要将其按照它的重要程度 ...
- 数组去重以及数组对象去重方法总结
数组去重以及数组对象去重方法总结 一.数组对象去重 1.reduce方法 2.利用原生js+空对象+空数组 3.利用原生js+标志位+空数组 4.利用双指针思想+splice方法 二.数组去重 1.利 ...
- php数组排序的方法有哪些,PHP常见数组排序方法有哪些
PHP常见数组排序方法有哪些 发布时间:2020-12-16 10:43:23 来源:亿速云 阅读:98 作者:小新 这篇文章主要介绍PHP常见数组排序方法有哪些,文中介绍的非常详细,具有一定的参考价 ...
- 数组排序方法的性能比较(3):LINQ排序实现分析
上次我们分析了Array.Sort<T>方法的实现方式,并了解到类库会为一些特例而使用高性能的排序方式--int数组便是这样一例,因此从测试结果上来看其性能特别高.不过从数据上看,即便是在 ...
- OpenCV【零】—————cv::Mat——Mat对象创建方法
OpenCV (一)--Mat对象创建方法 目录 OpenCV (一)--Mat对象创建方法 1. cv::Mat优点及原理(本质类) 2. Mat类拷贝及对象的创建方法 3. Mat 对象元素的高效 ...
- Xposed: 勾住(Hook) Android应用程序对象的方法,实现AOP
Xposed Xposed能够勾住(Hook) Android应用程序对象的方法,实现AOP,一个简单的例子: public class WebViewHook implements IXposedH ...
最新文章
- Vi/Vim查找替换使用方法
- 神策 2020 数据驱动用户大会主会场亮点回顾(内附回放)
- OS / 总线锁和缓存一致性
- mysql addslashes_PHP函数addslashes和mysql_real_escape_string的区别
- 计算属性computed的使用
- LeetCode--45. 跳跃游戏Ⅱ(贪心)
- Ruby on Rails开发Web应用的基本概念
- 通过iLO进行Zabbix监控——针对HP服务器集成
- 塔防游戏制作教程(一)
- 做过启动盘的U盘怎么复原?三种方法教你
- 计算机等级考试中电脑死机了,GRE考试电脑死机
- 微信公众号无限推送消息微信群发微信定时群发微信主动推送微信客服消息
- Visual Studio帮助文档安装以及设置(内置msdn)
- FreeRTOS消息队列
- 硬盘插上后计算机无法识别,移动硬盘插入Mac后,在Windows无法识别
- 机器学习入门:准备知识笔记(pandas)之一
- 计算机组成原理题库(唐朔飞)
- revit二次开发 创建图纸图框,视图放到图框中心点位置
- matrix67系列好文
- 哪里有 介绍 LicenseManager 的资料??