下面我将详细讲解“c#实现最简洁的快速排序(你绝对可以看懂)”的完整攻略。
1、什么是快速排序?
快速排序是一种常用的排序算法,其思想是将一个数组划分为两个子数组,然后分别对这两个子数组进行排序。通过不断地递归调用这个过程,最终得到有序的数组。
2、快速排序的步骤
下面是快速排序的步骤:
- 选择一个基准值(pivot),一般选择数组中的第一个元素。
- 定义两个指针,一个指向数组的起始位置,一个指向数组的末尾位置。
- 然后从数组的末尾位置向起始位置移动,找到比基准值小的元素。将它与起始位置的元素交换。
- 然后从起始位置向末尾位置移动,找到比基准值大的元素。将它与末尾位置的元素交换。
- 重复3和4步,直到起始位置和末尾位置相遇。
- 将起始位置或者末尾位置的元素与基准值交换。
- 递归调用快速排序函数,对划分出的两个子数组进行排序。
3、c#实现最简洁的快速排序
下面是c#实现最简洁的快速排序。
public static void QuickSort(List<int> arr, int left, int right)
{
if (left >= right)
{
return;
}
int pivot = arr[left];
int i = left + 1;
int j = right;
while (i <= j)
{
while (i <= j && arr[i] <= pivot)
{
i++;
}
while (i <= j && arr[j] >= pivot)
{
j--;
}
if (i < j)
{
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
int tmp2 = arr[left];
arr[left] = arr[j];
arr[j] = tmp2;
QuickSort(arr, left, j - 1);
QuickSort(arr, j + 1, right);
}
这段代码中,我们用List
4、示例说明
下面是两个快速排序的示例。
- 数组排序
List<int> arr = new List<int> { 2, 5, 1, 3, 4 };
QuickSort(arr, 0, arr.Count - 1);
foreach (int i in arr)
{
Console.Write(i + " ");
}
结果输出为:1 2 3 4 5。
- 自定义排序规则
List<Student> stuList = new List<Student>();
stuList.Add(new Student("Tom", 20));
stuList.Add(new Student("Jerry", 22));
stuList.Add(new Student("Alice", 21));
QuickSort(stuList, 0, stuList.Count - 1, new StudentComparer());
foreach (Student s in stuList)
{
Console.WriteLine(s.Name + " " + s.Age);
}
结果输出为:Alice 21 Jerry 22 Tom 20。这里我们使用自定义的比较器StudentComparer,对按照年龄进行从小到大排序。
5、总结
以上就是C#实现最简洁的快速排序的完整攻略。通过学习这篇文章,希望大家对快速排序算法有了更深入的理解,也可以更快地实现快速排序的功能。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:c#实现最简洁的快速排序(你绝对可以看懂) - Python技术站