我自己编写的实现的对一些列数字的索引进行排序的类 (注意:不是对数字集合进行排序,而是对数字集合的索引按照数字值进行排序)
2011-04-01 17:12
567 查看
我自己编写的基于
C#排序算法——基类的实现 http://blog.csdn.net/hustcyb/archive/2008/09/08/2899309.aspx
实现的对一些列数字的索引进行排序的类 (注意:不是对数字集合进行排序,而是对数字集合的索引按照数字值进行排序)
《IndexSorter.cs》
using System;
using System.Collections.Generic;
using System.Text;
namespace Taobao.open.api
{
/// <summary>
/// 用于定义升序和降序的枚举
/// </summary>
public enum Order
{
ASC,
DESC,
}
public delegate int CompareDelegate<T>(T left, T right);
/// <summary>
/// 作者 : cyb
/// 发表时间 : 2008-9-8
/// qq : 13101908
/// e-mail : hustcyb@gmail.com
/// </summary>
public abstract class IndexSorter
{
public virtual void IndexSort<T>(IList<int> listindex, IList<T> list, CompareDelegate<T> compare)
{
// 重载此函数,实现各种比较算法,但是客户端调用的时候调用的是
// IndexSorter<T>(IList<int> listindex, IList<T> list) where T : IComparable<T>
// 或
// IndexSorter<T>(IList<int> listindex, IList<T> list) where T : IComparable<T>
if (list == null )
{
throw new ArgumentNullException( "Argument for IList is null" );
}
if (compare == null )
{
throw new ArgumentNullException( "Argument for CompareDelegate is null" );
}
}
// 以下2个函数为 IComparable
public void IndexSort<T>(IList<int> listindex, IList<T> list, Order order) where T : IComparable<T>
{
CompareDelegate<T> compare;
if (order == Order.ASC)
{
compare = delegate (T first, T second)
{
return first.CompareTo(second);
};
}
else
{
compare = delegate (T first, T second)
{
return -first.CompareTo(second);
};
}
IndexSort(listindex, list, compare);
}
public void IndexSort<T>(IList<int> listindex, IList<T> list) where T : IComparable<T>
{
this.IndexSort(listindex, list, Order.ASC);
}
// 以下2个函数为 IComparer
public void IndexSort<T>(IList<int> listindex, IList<T> list, IComparer<T> comparer, Order order)
{
CompareDelegate<T> compare;
if (order == Order.ASC)
{
compare = delegate (T first, T second)
{
return comparer.Compare(first, second);
};
}
else
{
compare = delegate (T first, T second)
{
return -comparer.Compare(first, second);
};
}
IndexSort(listindex, list, compare);
}
public void IndexSort<T>(IList<int> listindex, IList<T> list, IComparer<T> comparer)
{
this.IndexSort(listindex, list, comparer, Order.ASC);
}
/// <summary>
/// 交换集合中的两个元素,子类中会用到
/// </summary>
public static void SwapListItem(IList<int> listindex, int firstIndex, int secondIndex)
{
int temp = listindex[firstIndex];
listindex[firstIndex] = listindex[secondIndex];
listindex[secondIndex] = temp; //T temp = list[firstIndex];
//list[firstIndex] = list[secondIndex];
//list[secondIndex] = temp;
}
}
}
《BubbleIndexSorter.cs》
using System;
using System.Collections.Generic;
using System.Text;
namespace Taobao.open.api
{
/// <summary>
/// 作者 : 冒泡排序
/// 发表时间 : 2008-9-8
/// qq : 13101908
/// e-mail : hustcyb@gmail.com
/// </summary>
public class BubbleSorter : IndexSorter
{
//public override void IndexSort<T>(IList<T> list, CompareDelegate<T> compare)
public override void IndexSort<T>(IList<int> listindex, IList<T> list, CompareDelegate<T> compare)
{
for (int endIndex = list.Count - 1; endIndex > 0; endIndex--)
{
for (int index = 0; index < endIndex; index++)
{
if (compare(list[listindex[index]], list[listindex[index + 1]]) > 0) //list[listindex[index]] > list[listindex[index + 1]]
{
SwapListItem(listindex, index, index + 1); //调用基类的SwapListItem方法交换list[index]和list[index + 1]
}
}
foreach (int i in listindex)
{
Console.Write(list[i] + " ");
}
Console.Write("\r\n");
int a = 1;
}
}
}
}
C#排序算法——基类的实现 http://blog.csdn.net/hustcyb/archive/2008/09/08/2899309.aspx
实现的对一些列数字的索引进行排序的类 (注意:不是对数字集合进行排序,而是对数字集合的索引按照数字值进行排序)
《IndexSorter.cs》
using System;
using System.Collections.Generic;
using System.Text;
namespace Taobao.open.api
{
/// <summary>
/// 用于定义升序和降序的枚举
/// </summary>
public enum Order
{
ASC,
DESC,
}
public delegate int CompareDelegate<T>(T left, T right);
/// <summary>
/// 作者 : cyb
/// 发表时间 : 2008-9-8
/// qq : 13101908
/// e-mail : hustcyb@gmail.com
/// </summary>
public abstract class IndexSorter
{
public virtual void IndexSort<T>(IList<int> listindex, IList<T> list, CompareDelegate<T> compare)
{
// 重载此函数,实现各种比较算法,但是客户端调用的时候调用的是
// IndexSorter<T>(IList<int> listindex, IList<T> list) where T : IComparable<T>
// 或
// IndexSorter<T>(IList<int> listindex, IList<T> list) where T : IComparable<T>
if (list == null )
{
throw new ArgumentNullException( "Argument for IList is null" );
}
if (compare == null )
{
throw new ArgumentNullException( "Argument for CompareDelegate is null" );
}
}
// 以下2个函数为 IComparable
public void IndexSort<T>(IList<int> listindex, IList<T> list, Order order) where T : IComparable<T>
{
CompareDelegate<T> compare;
if (order == Order.ASC)
{
compare = delegate (T first, T second)
{
return first.CompareTo(second);
};
}
else
{
compare = delegate (T first, T second)
{
return -first.CompareTo(second);
};
}
IndexSort(listindex, list, compare);
}
public void IndexSort<T>(IList<int> listindex, IList<T> list) where T : IComparable<T>
{
this.IndexSort(listindex, list, Order.ASC);
}
// 以下2个函数为 IComparer
public void IndexSort<T>(IList<int> listindex, IList<T> list, IComparer<T> comparer, Order order)
{
CompareDelegate<T> compare;
if (order == Order.ASC)
{
compare = delegate (T first, T second)
{
return comparer.Compare(first, second);
};
}
else
{
compare = delegate (T first, T second)
{
return -comparer.Compare(first, second);
};
}
IndexSort(listindex, list, compare);
}
public void IndexSort<T>(IList<int> listindex, IList<T> list, IComparer<T> comparer)
{
this.IndexSort(listindex, list, comparer, Order.ASC);
}
/// <summary>
/// 交换集合中的两个元素,子类中会用到
/// </summary>
public static void SwapListItem(IList<int> listindex, int firstIndex, int secondIndex)
{
int temp = listindex[firstIndex];
listindex[firstIndex] = listindex[secondIndex];
listindex[secondIndex] = temp; //T temp = list[firstIndex];
//list[firstIndex] = list[secondIndex];
//list[secondIndex] = temp;
}
}
}
《BubbleIndexSorter.cs》
using System;
using System.Collections.Generic;
using System.Text;
namespace Taobao.open.api
{
/// <summary>
/// 作者 : 冒泡排序
/// 发表时间 : 2008-9-8
/// qq : 13101908
/// e-mail : hustcyb@gmail.com
/// </summary>
public class BubbleSorter : IndexSorter
{
//public override void IndexSort<T>(IList<T> list, CompareDelegate<T> compare)
public override void IndexSort<T>(IList<int> listindex, IList<T> list, CompareDelegate<T> compare)
{
for (int endIndex = list.Count - 1; endIndex > 0; endIndex--)
{
for (int index = 0; index < endIndex; index++)
{
if (compare(list[listindex[index]], list[listindex[index + 1]]) > 0) //list[listindex[index]] > list[listindex[index + 1]]
{
SwapListItem(listindex, index, index + 1); //调用基类的SwapListItem方法交换list[index]和list[index + 1]
}
}
foreach (int i in listindex)
{
Console.Write(list[i] + " ");
}
Console.Write("\r\n");
int a = 1;
}
}
}
}
相关文章推荐
- 用java编写TreeMap<Student,String>集合,存储的元素按照年龄进行排序
- C++中实现对map按照value值进行排序
- 实现功能要求统计图书的总价,编写方法查询出在50元以上的所有图书,使用排序接口图书按照价格排序(升序排序)
- mysql将数字组成的字符串字段按照字符串数值型的大小进行排序
- 3. 编写一个C程序,实现对10个整数进行升序排序输出。
- PHP读取数据库并按照中文名称进行排序实现代码
- PHP读取数据库并按照中文名称进行排序实现代码
- php和mysql采用utf-8编码时实现按照一个文本字段的首字母的拼音顺序进行排序的方法
- (原创)Hibernate学生选课,实现课程按照学生人数进行排序的方法
- 对map集合按照value从大到小进行排序
- 编写程序实现以下功能: 随机产生20个正整数存入数组a中,且每个数均在1000-9999之间(包含1000和9999)。对数组进行排序,要求按每个数的后三位的大小进行升序排列,然后取出满足此条
- IOS开发中实现UITableView按照首字母将集合进行检索分组
- 在Shell脚本中编写AWK脚本实现数据提取—注意格式、awk中使用shell变量、awk中数字字符串转换成数字、awk中字符串相等比较
- leetcode+贪心,按照左端点进行排序,然后注意当前的右端点和左端点相比较
- 如何实现在客户端,使CheckBox按照选择的顺序进行排序--来自博问的问题
- 集合框架_模拟斗地主洗牌和发牌并对牌进行排序的代码实现
- C++中实现对map按照value值进行排序 - 菜鸟变身记 - 51CTO技术博客
- 实现从一个ListBox向另一个ListBox中移动选中项,并按照value进行排序
- TreeSet创建树集合时,按照升序进行排序
- Java:对集合中的对象进行排序需要实现Interface Comparable接口并实现int compareTo(T o)方法