- 冒泡排序
分为趟数和次数,元素之间两两比较交换,比较Length-1趟,每趟比较Length-1-i次,每次比较按照升序或降序的规则,交换顺序
数据:9531315612–>1112335569
for(int i=0;i<number.Length-1;i++)
{
for{int j=0;j<number.Length-1-i;i++}
{
if(num[j]>num[j+1])//交换顺序
{
int temp=0;
temp=number[j];
num[j]=num[j+1];
num[j+1]=temp;
}
}
}
- 选择排序
每趟拿一个元素与后面的元素比较,找到最大值,记录最大值索引下来,每趟比较结束后在交换
原始数据
72 54 59 30 31 78 2 77 82 72–》82 78 77 72 72 59 54 31 30 2
for(int i=0;i<arr.Length-1;i++)//比较N趟
{
int index=i;//记录最大值索引
for(int j=i+1;j<arr.Length;i++)//每趟比较N次
{
if(arr[index]<arr[j])
{
index=j;
}
}
//每趟比较完毕后让最大值与arr[i]交换顺序
int temp=0;
temp=arr[i];
arr[i]=arr[index];
arr[index]=temp;
}
3.插入排序:
假设最大值为数组的第一个元素,for循环,与后面的每个元素比较找到最大值
for(int i=1;i<length-1;i++)
{
int index=i;
int temp=num[i];
while(i>0&&num[i-1]>num[i])
{
num[i]=num[i-1];
}
num[i]=temp;
}
4..List《T》排序对象排序–>List里存储的是对象—>接口排序
定义类
public class DDZ_Card
{
public int value;//牌值
public string color;//花色
}
一:实现IComparable接口
public class DDZ_Card:IComparable
{
public int value;//牌值
public string color;//花色
//实现接口
public int CompareTo(object obj)
{
DDZ_Card card = obj as DDZ_Card;
return value.CompareTo(card.value);//
}
}
二:实现,IComparer泛型接口
public class DDZ_Card:IComparer
{
public int value;//牌值
public string color;//花色
//实现接口
public int Compare(object x, object y)
{
DDZ_Card card1 = x as DDZ_Card;
DDZ_Card card2 = y as DDZ_Card;
if (card1.value > card2.value)
return 1;
else
return -1;
}
}
三:通过List.Sort的 public void Sort(Comparison<T> comparison)方法
/// <summary>
/// 卡牌排序
/// </summary>
/// <param name="cards"></param>
/// <param name="asc">是否升序</param>
public static void CardSort(List<DDZ_Card> cards, bool asc=true)
{
cards.Sort((DDZ_Card a,DDZ_Card b) => {
if (asc)//升序
{
return a.value.CompareTo(b.value);
}
else//降序
{
return -a.value.CompareTo(b.value);
}
});
}
5.List《T》排序–>Linq排序
一:使用Lambda表达式排序:
①:通过筛选条件,找到满足条件的集合
/// <summary>
/// 癞子排序
/// </summary>
/// <param name="keylist"></param>
/// <returns></returns>
private List<int> LaiziSqrt(List<int> keylist)
{
List<int> templist = new List<int>(keylist);
if (MJManager.laizi != -1)//MJManager.laizi是Int类型的值,默认-1
{
List<int> templaizi = templist.Where(x => x == MJManager.laizi).ToList();//找到集合中所有赖子,存入新的集合中
List<int> newlist = templist.Where(x => x != MJManager.laizi).ToList();//找到集合中所有非赖子,存入新集合中
newlist.Sort();//非赖子集合排序
templaizi.AddRange(newlist);//在赖子集合末尾添加非赖子集合
return templaizi;
}
return templist;
}
②:通过OrderBy(升序)和OrderByDescending(降序)对元素集合排序
public List<Card> Sort(List<Card> card)
{
return card..OrderBy(x => x.value).ToList<Card>();//按照Value升序排序
}
public List<DDZ_Card> KK(List<DDZ_Card> cc)
{
return cc.OrderByDescending(x => x.value).ToList<DDZ_Card>();//通过键值降序排序
}
多字段主次顺序排序情况,先按no排序,再按name排序
List<Student> stuList= stu.OrderBy(s=> s.stuNO).ThenBy(s=> s.stuName).ToList<Student>();