快速排序算法
快速排序算法:
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace kuaisu
{
class Program
{
static void Main(string[] args)
{
//建立测试数组
int[] data = new Int32[]{ 1,2,19,15,1,3,4};
Run(data, 0, data.Length - 1);
//打印数组
for (int i = 0; i < data.Length ; i++)
{
Console.Write("{0},", data[i]);
}
Console.ReadLine();
}
/// <summary>
/// 快速排序算法
/// </summary>
/// <param name="data">排序数组</param>
/// <param name="low">排序下限</param>
/// <param name="high">排序上限</param>
static void Run(int[] data, int low, int high)
{
int i = low;
int j = high;
//取一个比较的基数,这里是取索引居中的数组元素
int middle = data[(low + high) / 2];
do
{
//过滤左边比居中元素小的
while (data[i] < middle && i < high)
i++;
//过滤右边比居中元素大的
while (data[j] > middle && j > low)
j--;
//左边大的数组元素与右边小的数组元素互换
if (i <= j)
{
int temp = data[i];
data[i] = data[j];
data[j] = temp;
i++;
j--;
}
} while (i <= j);
//递归对 比 割点元素都小的那个序列 进行快速排序
if (j > low)
{
Run(data, low, j);
}
//递归对比割点元素都大的那个序列进行快速排序
if (i < high)
{
Run(data, i, high);
}
}
}
}