public void QuickSort(int fore, int last) //快速排序算法
{
int begin = fore;
int end = last;
int tem = data[fore]; //基准元素
while (begin != end) //当左右两端扫描未碰头时
{
if (data[end] < tem) //当基准元素后面的元素大于基准元素后
{
data[begin] = data[end];
while (begin != end)
{
if (data[begin] > tem)
{
data[end] = data[begin];
break;
}
else
{
begin++; //向右挪动
}
}
}
//****************************
else **
{ **
end--; //向左挪动 **
} **
//****************************
// 改成
//end--;
/*
会产生错误,因为这样 end-- 语句必执行,而
当上面的while语句执行完并跳出来后执行此语句使得本已满足
begin!=end 的条件变成 end<begin 从而照样满足 begin!=end,
while循环继续执行导致数组下标越界
*/
}
data[begin] = tem;
if (fore !=begin)
{
int i = fore;
int j= begin - 1;
QuickSort(i,j);
}
if (begin != last)
{
int i= begin + 1;
int j = last;
QuickSort(i, j);
}
}
}
C#之快速排序易产生错误代码对比
本文转载:CSDN博客