C# 不用递归实现快速排序
时间: 2023-11-17 13:01:15 浏览: 101
快速排序是一种常用的排序算法,它的核心思想是分治法,通过将一个大问题分解成多个小问题来解决。虽然快速排序通常使用递归来实现,但是也可以使用非递归的方式来实现。在C#中,可以使用栈来模拟递归过程,从而实现非递归的快速排序。
以下是C#中非递归实现快速排序的代码:
```csharp
public static void QuickSort(int[] arr, int left, int right)
{
Stack<int> stack = new Stack<int>();
stack.Push(left);
stack.Push(right);
while (stack.Count > 0)
{
int r = stack.Pop();
int l = stack.Pop();
int i = l, j = r;
int pivot = arr[(l + r) / 2];
while (i <= j)
{
while (arr[i] < pivot) i++;
while (arr[j] > pivot) j--;
if (i <= j)
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
i++;
j--;
}
}
if (l < j)
{
stack.Push(l);
stack.Push(j);
}
if (i < r)
{
stack.Push(i);
stack.Push(r);
}
}
}
```
以上代码使用了一个栈来模拟递归过程,每次将需要排序的左右边界入栈,然后在循环中取出左右边界,进行快速排序的过程。在排序过程中,使用了一个中心元素作为参考点,将数组分为两部分,左边部分小于参考点,右边部分大于参考点,然后对左右两部分分别进行排序。
阅读全文