快速排序算法:在待排序的序列arr首端和末端分别定义标志位i,j,默认取arr的第一个数字为参照数,并将值赋给临时变量temp,首先从末端j所处的位置开始查找,直到找到比temp小的数,则将arr[j]赋值给arr[i],并将i向后移动一位,即i++,然后从i开始向后查找,直到找到比temp大的数,则将arr[i]的值付给arr[j],同时将j向前移一位,即j–,直到i==j,将temp的值插入到arr[i]=arr[j],这样一趟排序就完成了,每一趟排序都可以确定用来做参照数的位置,然后已这个参照数为界,将序列分为左右两部分,左边都是小于参照数的,右边都是大于参照数的,然后用递归分别对左右两个序列进行上面同样的操作。
C#代码:
static void Main(string[] args)
{
Console.WriteLine("请输入第一个整数串,,以逗号分隔:");
string str1 = Console.ReadLine();
int[] arr = Array.ConvertAll<string, int>(str1.Split(','), delegate(string c) { return int.Parse(c.ToString()); });
int low = 0;
int high = arr.Length - 1;
FastSort(arr,low,high);
Console.WriteLine("快速排序后的顺序为:"+string.Join(",",arr));
Console.ReadLine();
}
private static void FastSort(int[] arr,int low,int high)
{
int i = low;
int j = high;
int temp = arr[low];
try
{
while (i < j)
{
if (arr[j] < temp)
{
arr[i] = arr[j];
i++;
}
else
{
j--;
continue;
}
while (i < j)
{
if (arr[i] > temp)
{
arr[j] = arr[i];
j--;
break;
}
else
{
i++;
}
}
}
if (i == j)
{
arr[i] = temp;
}
if (i - 1 > low)
{
FastSort(arr, low, i - 1);
}
if (j + 1 < high)
{
FastSort(arr, j + 1, high);
}
}
catch (Exception ex)
{
throw ex;
}
}
编写的过程中犯了个低级错误,将输出结果的代码写到的FastSort方法中,导致误将未执行完的结果当成了最终结果,懵逼的去找了好久的原因…..