我在c#中编写了我的快速排序算法,但它有一个问题,当我编译它时,它在某些条件下不起作用,例如当我在textbox6中输入数字12,32,11进行排序时,它会在超出范围时出错我去跟踪它,调试器显示num []取nums [0] = 12,nums [1] = 11,nums [2] = 1
编辑: 我改变了while条件,它知道不会超出范围错误,但当输入为12,32,11时输出11,12,1
private void button5_Click(object sender, EventArgs e)
{
string[] x = textBox6.Text.Split(',');
int[] nums = new int[x.Length];
for (int counter = 0; counter < x.Length; counter++)
{
nums[counter] = Convert.ToInt32(x[counter]);
}
int i = 0;
int j = nums.Length;
int pivot = nums[0];
do
{
do
{
i++;
}
while ((i < nums.Length) && (nums[i] < pivot));
do
{
j--;
}
while (nums[j]>pivot);
if (i < j)
{
int temp = i;
nums[i] = nums[j];
nums[j] = temp;
}
}while(i<j);
int temp1 = nums[0];
nums[0] = nums[j];
nums[j] = temp1;
int pivotpoint = j;
string QuickSort = "";
foreach (var n in nums)
QuickSort += n.ToString() + ",";
textBox5.Text = QuickSort;
}
答案 0 :(得分:2)
您的问题是在您的do-while循环中没有对i
进行边界检查。 i
将超出nums
数组的末尾。尝试修改while条件:
while ((i<nums.Length) && (nums[i]<pivot))
当然你可以简单地使用Array.Sort(nums);