冒泡排序
冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。这个过程一直进行,直到没有需要交换的元素为止,这时数列就排序完成了。这种算法的名字来源于较小的元素会通过交换慢慢“浮”到数列的顶端,就像水中的气泡一样。
![](https://i-blog.csdnimg.cn/direct/ec87c7f8e6294d2d9359dc15e1548292.gif)
//冒泡排序
int[] ints = { 1, 8, 6, 12, 7, 16, 21 };
for (int i = 0; i < ints.Length; i++)
{
for (int j = 0;j<ints.Length-1;j++)
{
if(ints[j] > ints[j+1])
{
int temp=ints[j];
ints[j]=ints[j+1];
ints[j+1]=temp;
}
}
}
//简洁方法
//由于每一次进行比较都能得出一个最大的排在后面,那么每次排除最大的就不用在进行比较
for (int i = 0;i < ints.Length-1;i++)
{
for(int j = 0; j<ints.Length-1-i;j++)
{
if (ints[j]>ints[j+1])
{
//语法糖
(ints[j],ints[j+1])=(ints[j + 1], ints[j]);
}
}
}
选择排序
选择排序是一种简单直观的排序算法,它的基本思想是在每一次遍历中找到最小(或最大)的元素,将其放置到序列的起始位置。这个过程会不断重复,直到所有的元素都被排序。尽管选择排序的时间复杂度为O(n^2),它的优点在于不占用额外的内存空间。
![](https://i-blog.csdnimg.cn/direct/aa0da40bd3ca4bc383a14634a74a7ea5.gif)
//选择排序
int[] intss = { 1,3,6,9,12,4,7};
for (int i = 0;i<intss.Length-1;i++)
{
int Minsum = i;
for (int j =i+1;j<intss.Length;j++)
{
if (intss[j] < intss[Minsum])
{
Minsum = j;
}
}
(intss[Minsum], intss[i]) = (intss[i],intss[Minsum]);
}
foreach (var i in intss)
{
Console.WriteLine(i);
}
补充
//Array 数组排序
//升序 从小到大
Array.Sort(intss);
for (int i = 0; i < intss.Length; i++)
{
Console.Write(intss[i]);
}
Console.WriteLine();
//降序 从大到小
Array.Reverse(ints);
for (int i = 0;i < ints.Length; i++)
{
Console.Write(ints[i]+"\t");
}
//高阶函数排序
Array.Sort(ints, (x, y) => x - y); //升序
Array.Sort(intss, (x, y) => y - x);//降序
ArrayList arrayList = new ArrayList() { 10,21,36,4,5,61,52};
arrayList.Sort(new MyArray());
}
}
//自定义比较器
//Comparer 接口
//MyArray 类
class MyArray:IComparer
{
public int Compare(object x, object y)
{
return CaseInsensitiveComparer.Default.Compare(y,x);
}
}