C#排序

本文提供了使用 C# 实现的经典排序算法的代码示例,包括选择排序、冒泡排序、快速排序、插入排序和希尔排序。每种排序算法都有详细的实现过程,并通过具体的例子展示了如何使用这些算法。

C#实现所有经典排序算法
2008-6-12
//选择排序
class SelectionSorter
{
private int min;
public void Sort(int[] arr)
{
for (int i = 0; i < arr.Length - 1; ++i)
{
min = i;
for (int j = i + 1; j < arr.Length; ++j)
{
if (arr[j] < arr[min])
min = j;
}
int t = arr[min];
arr[min] = arr[i];
arr[i] = t;
}
}
static void Main(string[] args)
{
int[] array = new int[] { 1, 5, 3, 6, 10, 55, 9, 2, 87, 12, 34, 75, 33, 47 };
SelectionSorter s = new SelectionSorter();
s.Sort(array);
foreach (int m in array)
Console.WriteLine("{0}", m);
}
}
//冒泡排序
class EbullitionSorter
{
public void Sort(int[] arr)
{
int i, j, temp;
bool done = false;
j = 1;
while ((j < arr.Length) && (!done))//判断长度
{
done = true;
for (i = 0; i < arr.Length - j; i++)
{
if (arr[i] > arr[i + 1])
{
done = false;
temp = arr[i];
arr[i] = arr[i + 1];//交换数据
arr[i + 1] = temp;
}
}
j++;
}
}

static void Main(string[] args)
{
int[] array = new int[] { 1, 5, 3, 6, 10, 55, 9, 2, 87, 12, 34, 75, 33, 47 };
EbullitionSorter e = new EbullitionSorter ();
e.Sort(array);
foreach (int m in array)
Console.WriteLine("{0}", m);

}
}
//快速排序
class QuickSorter
{
private void swap(ref int l, ref int r)
{
int temp;
temp = l;
l = r;
r = temp;
}
public 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);
}



static void Main(string[] args)
{
int[] iArrary = new int[] { 1, 5, 3, 6, 10, 55, 9, 2, 87, 12, 34, 75, 33, 47 };
QuickSorter q = new QuickSorter();
q.Sort(iArrary, 0, 13);
for (int m = 0; m <= 13; m++)
Console.WriteLine("{0}", iArrary[m]);
}
}
//插入排序
public class InsertionSorter
{
public void Sort(int[] arr)
{
for (int i = 1; i < arr.Length; i++)
{
int t = arr[i];
int j = i;
while ((j > 0) && (arr[j - 1] > t))
{
arr[j] = arr[j - 1];//交换顺序
--j;
}
arr[j] = t;
}
}
static void Main(string[] args)
{
int[] array = new int[] { 1, 5, 3, 6, 10, 55, 9, 2, 87, 12, 34, 75, 33, 47 };
InsertionSorter i = new InsertionSorter();
i.Sort(array);
foreach (int m in array)
Console.WriteLine("{0}", m);
}
}
//希尔排序
public class ShellSorter
{
public void Sort(int[] arr)
{
int inc;
for (inc = 1; inc <= arr.Length / 9; inc = 3 * inc + 1) ;
for (; inc > 0; inc /= 3)
{
for (int i = inc + 1; i <= arr.Length; i += inc)
{
int t = arr[i - 1];
int j = i;
while ((j > inc) && (arr[j - inc - 1] > t))
{
arr[j - 1] = arr[j - inc - 1];//交换数据
j -= inc;
}
arr[j - 1] = t;
}
}
}

static void Main(string[] args)
{
int[] array = new int[] { 1, 5, 3, 6, 10, 55, 9, 2, 87, 12, 34, 75, 33, 47 };
ShellSorter s = new ShellSorter();
s.Sort(array);
foreach (int m in array)
Console.WriteLine("{0}", m);

}
}

C#中,排序是一项常见的操作,可以对数组、列表等各种集合类型的数据进行排列。以下是几种常用的排序方式: ### 1. 使用 `Array.Sort()` 对数组进行排序 `Array.Sort()` 是 C# 中最简单的方式之一用于对一维数组进行升序排序。 **示例:** ```csharp int[] numbers = {5, 3, 8, 4, 9}; Array.Sort(numbers); foreach (var num in numbers) { Console.WriteLine(num); // 输出结果将按升序打印数字 } ``` ### 2. 利用 LINQ 查询表达式或方法语法排序 List<T> 对于泛型列表(如 `List<int>` 或者自定义对象类型的 `List<MyObject>`),您可以借助 Language Integrated Query (LINQ) 进行更复杂的查询和排序任务。 #### 升序排序: ```csharp using System.Linq; ... List<int> listNumbers = new() {7, -2, 6, 0, 1}; var sortedAsc = from n in listNumbers orderby n select n; // 查询表达式形式 // 或者使用方法语法 var sortedAscMethodSyntax = listNumbers.OrderBy(n => n).ToList(); ``` #### 降序排序: 只需添加 `.OrderByDescending(...)` 替换掉普通的 `OrderBy(...)` ```csharp var sortedDesc = from n in listNumbers orderby n descending select n; // 等效于 listNumbers.OrderByDescending(x => x); ``` ### 3. 自定义比较器实现复杂规则下的排序 当您需要按照特定属性或是更为复杂的条件来进行排序时,则可以通过创建实现了 IComparer 接口的类来自定义比较逻辑,并将其传递给 Array.Sort(), List<T>.Sort()等函数作为第三个参数;或者是直接传入 lambda 表达式的委托来简化代码编写过程。 例如我们有一个包含学生信息的对象集合想先依据年龄大小再根据姓名字母顺序排: ```csharp public class Student : IComparable<Student> { public string Name { get; set; } public int Age { get; set; } public int CompareTo(Student other) { if (this.Age != other.Age) return this.Age.CompareTo(other.Age); return String.Compare(this.Name, other.Name); } } ... List<Student> students = new(){ new Student{Name="Tom",Age=21}, new Student{Name="Jerry",Age=20}, ... }; students.Sort(); // 默认采用CompareTo方式进行排序 ``` 以上就是关于如何在C#语言环境中完成基本到高级层次的不同种类数据结构上应用排序算法的一些基础知识了!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值