public void Sort(int[] array,int left,int right)
{
//如果传递过来的参数,左边不小于右边,即只有一个元素,则可以不用排序
if (left >= right)
return;
//定义比较基准,最左边索引,最右边索引
int X = array[left];
int i = left;
int j = right;
//将大于基准的数放右边,小于基准的数放左边,直道i=j,即把所有的数全分类好
while (i < j)
{
//从右至左遍历,将小于基准的数放左边
while (i < j)
{
//如果找到小于基准的数
if (array[j] < X)
{
array[i] = array[j]; //这里的i是数据空缺位,i会在下一个循环自动更新
break; //下方的j同理
}
else
{
j--; //继续寻找右边的下一个
}
}
//从左至右遍历,将大于基准的数放右边
while (i < j)
{
//如果找到大于基准的数
if (array[i] > X)
{
array[j] = array[i];
break;
}
else
{
i++; //继续寻找左边的下一个
}
}
}
array[i] = X; //把基准值给空缺数据的索引
Sort(array, left, i - 1); //递归基准左半边的数据
Sort(array, i + 1, right); //递归基准右半边的数据
}
排序之快速排序算法(有详细注释o)
最新推荐文章于 2023-07-18 17:23:34 发布