上学的时候学算法,大体是知道了排序的工作原理,昨天写程序了突然发现原来明白和会写差很远,所以自己动手再写一次,我感觉快速排序的算法比冒泡和选择等的算法稍难以理解一点,不知道是我智商太低还是才疏学浅,把我写的快速排序方法,贴上来,仅供记忆。
/// <summary>
/// 快速排序算法
/// </summary>
/// <param name="array">待排序数组</param>
/// <param name="low">起始位置</param>
/// <param name="high">结束位置</param>
public void QuickSort(int[] array, int low, int high)
{
int pivot=array[low]; //支点,比较大小用。
int left, right;
int temp; //临时变量,记录比较到哪里完成了一轮交换
left = low;
right = high;
if (low >= high)
{
return;
}
else{
while (true) {
while (array[right] > pivot)
{
right--;
}
while (array[left] < pivot)
{
left++;
}
if (left>=right)
{
temp=left;
break;
}
else
{
Swap(ref array[left], ref array[right]);
}
}
int length = array.Length; //下边把每轮交换后的结果显示出来,看看快速排序是如何工作的
for (int i = 0; i < length; i++)
{
Console.Write("array[" + i.ToString() + "]=" + array[i].ToString()+";");
}
Console.WriteLine();
QuickSort(array,low,temp-1); /对分割完的数组继续调用自己,直到数组只有一个元素为止。
QuickSort(array,temp+1,high);
}
}
/// <summary>
/// 交换两个数的值
/// </summary>
/// <param name="i"></param>
/// <param name="j"></param>
public void Swap(ref int i, ref int j)
{
int s;
s = j;
j = i;
i = s;
}
|
请发表评论