首页 新闻 会员 周边

快速排序为什么不能这样修改

0
[待解决问题]

public int Partition(int first, int last)
{
int pivotVal = arr[first];
int theFirst = first;
while (first <= last)
{
while (arr[first] <= pivotVal)
first++;
while (arr[last] >= pivotVal)
last--;
if (first < last)
{
Swap(first, last);
this.DisplayElements();
first++;
last--;
}
Swap(theFirst, last);
this.DisplayElements();
return last;
}
}

普罗旺斯的薰衣草的主页 普罗旺斯的薰衣草 | 菜鸟二级 | 园豆:202
提问于:2013-06-12 20:38
< >
分享
所有回答(1)
0

感觉这个程序问题有点多。

第一,我们不看代码本身,整体来看,return应该写在倒数第二个花括号外面,否则最外层的while循环只能走一次;

其次,看不到你写Swap函数,但是就参数而言,用的不是指针,不是引用,排序之后应该不会被回传;

最后,把上面的两个问题先解决,我试了一下,如果if(first<last)里面的循环是交换数组的值的话,程序就死在这儿,后面没发走了。

请再好好想想。希望对你有帮助。

虎虎小猫咪 | 园豆:195 (初学一级) | 2013-06-12 22:10
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册