using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 快速排序法
{
class Program
{
static void QuickSort(int[] dataArray, int left, int right)
{
if (left < right)
{
//设置一个key基值,且key位为左第一位(left位)
int key = dataArray[left];
//指向左(第一个)
int i = left;
//指向右(最后一个)
int j = right;
//左大于右时才有意义
while (i < j)
{
while (i < j)
{
//从array的右边最大位(j位)开始,找到一个小于或等于基准的数,找到后就放去左边的key位,此时的j位为坑位
//如果j位的数据不小于等于key,将降(j--)次继续while循环,直到j=i时,还是没有满足条件的时,此循环返回,此时的j位就等于初始的left位(i=left)
if (dataArray[j] <= key)
{
dataArray[i] = dataArray[j];
//找到一位满足条件后就返回(也就是一个大循环只进行一次交换)
break;
}
else
{
j--;
}
}
while (i < j)
{
//从array的左边i位开始,(i-j这个区间中),找一个大于key的数据,找到后就放去右边的j位,如果直到i=j时仍没有满足条件的,此循环返回,此时i=j,
if (dataArray[i] > key)
{
dataArray[j] = dataArray[i];
break;
}
else
{
i++;
}
}
}
//跳出循环,现在i==j i是中间位置
dataArray[j] = key;
QuickSort(dataArray, left, i - 1);
QuickSort(dataArray, i + 1, right);
}
}
static void Main(string[] args)
{
int[] array = { 42, 20, 17, 27, 13, 8, 17, 48,4,6,75,23,434,544,444,8,54353,8 };
QuickSort(array, 0, array.Length - 1);
for (int i = 0; i < array.Length; i++)
{
Console.Write(array[i] + ",");
}
Console.ReadKey();
}
}
}