快速排序 C# 代码(带注释)
发布时间
阅读量:
阅读量
class Program
{
static void Main(string[] args)
{
int[] arr = { 5, 1, 3, 7,3,6,9,10,2};
Sort(arr, 0, arr.Length - 1);
foreach(int v in arr)
{
Console.WriteLine(v);
}
}
static void Sort(int[] arr,int begin,int end)
{
if (begin > end) return;
int pivot = arr[begin];//设定基准元素
int i = begin, j = end;//保存起始和结尾索引下标
while (i != j)
{
//找到一个小于pivot的值,循环结束j所在位置为小于pivot的元素所在的位置
while (arr[j] >= pivot && j > i)
{
j--;
}
//找到一个大于pivot的值,循环结束i所在位置为大于pivot的元素所在的位置
while (arr[i] <= pivot&&j>i)
{
i++;
}
if (j > i) Swap(ref arr[i], ref arr[j]);//交换上面找到的两个值
}//循环结束i=j;
//交换起始的基准元素到i,j所在位置,交换后基准元素左侧都小于基准元素,右侧都大于基准元素
Swap(ref arr[begin], ref arr[i]);
//递归排序中间元素左侧数组;
Sort(arr, begin, i-1);
//递归排序中间元素右侧数组;
Sort(arr, i+1, end);
}
//利用ref传递引用,ref的变量要在声明函数外部声明;
static void Swap(ref int a, ref int b)
{
int temp = a;
a = b;
b = temp;
}
}
全部评论 (0)
还没有任何评论哟~
