C#中的QuickSort算法问题

时间:2010-12-19 11:13:06

标签: c# algorithm quicksort

我在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;

    }

1 个答案:

答案 0 :(得分:2)

您的问题是在您的do-while循环中没有对i进行边界检查。 i将超出nums数组的末尾。尝试修改while条件:

while ((i<nums.Length) && (nums[i]<pivot))

当然你可以简单地使用Array.Sort(nums);