Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c#快速排序算法无法继续_C#_Arrays_Algorithm_Sorting_Quicksort - Fatal编程技术网

c#快速排序算法无法继续

c#快速排序算法无法继续,c#,arrays,algorithm,sorting,quicksort,C#,Arrays,Algorithm,Sorting,Quicksort,我刚刚在c#中完成了快速排序的实现,但后来我遇到了这样一个问题。当我使用我的函数时 static void QS(int[] arr, int left, int right){ int pivot = left; int temp; int i = left + 1; int j = left + 1; do { if (arr [i] < arr [pivot]) {

我刚刚在c#中完成了快速排序的实现,但后来我遇到了这样一个问题。当我使用我的函数时

static void QS(int[] arr, int left, int right){
        int pivot = left;
        int temp;
        int i = left + 1;
        int j = left + 1;

        do {    
        if (arr [i] < arr [pivot]) {
                temp = arr [j];
                arr [j] = arr [i];
                arr [i] = temp;
                i++;
            }
            else{}
        j++;
        }while(j<=right);

            temp = arr [pivot];
            arr [pivot] = arr [i - 1];
            arr [i - 1] = temp;
} 
我得到的结果如下:
9、12、19、8、7、13、10、71、18、34、90、15、3
。 在这个问题上花了几个小时,我仍然不太明白为什么索引I不继续进行。也许问题比我想象的要多

我省略了递归调用以集中精力于函数本身。我正在使用以下伪代码:

Partiton(A,l,r)  
//[input corresponds to A[l…r]]  
p:=A[l]  
i:=l+1  
  for  
   j=l+1 to r  
    if A[j] < p  
    swap A[j] and A[i]  
    i:=i+1  
swap  A[l] and A[i‐1]
partton(A、l、r)
//[输入对应于[l…r]]
p:=A[l]
i:=l+1
对于
j=l+1至r
如果A[j]

有几件事:

在do-while循环中,您丢失了移动索引指针的比较(while循环),以及使快速排序真正起作用的递归调用。记住当你交换你的值时,递增i和递减j。其次,对于值i和j,不要将1添加到那些索引中,因为它们可能会给您带来越界错误,我假设您将像这样调用快速排序:快速排序(arr,0,arr.Length-1);。最后,请选择pivot作为中间值,因为它产生更快的排序时间和结果,而不是选择数组中的第一个值

我将这样写:

   quicksort(arr[], begin, end)
   {
       pivot = (begin + end) / 2
       left = begin;
       right = end;
   while (left <= right)
   {
      while (arr[left] < pivot)
      {
          left++;
      }
      while (arr[right] > pivot)
      {
          right--;
      }
      if (left <= right)
      {
          swap(arr, left, right);
          left++;
          right--;
      }
  }
   //do your recursive call logic here
 }
快速排序(arr[],开始,结束)
{
枢轴=(开始+结束)/2
左=开始;
右=结束;
while(左枢轴)
{
对--;
}

如果(左)变量计数不可用declared@Shekhar也没有使用它;为什么要声明它呢?它是在函数外部声明的,以查看索引我在哪里无法继续,但我将删除它以使代码更清晰。首先,快速排序是一种递归算法,您的代码示例不会递归。我省略了代码的递归部分,以集中讨论fuNCION本身即使在首次使用后也会产生错误的结果
   quicksort(arr[], begin, end)
   {
       pivot = (begin + end) / 2
       left = begin;
       right = end;
   while (left <= right)
   {
      while (arr[left] < pivot)
      {
          left++;
      }
      while (arr[right] > pivot)
      {
          right--;
      }
      if (left <= right)
      {
          swap(arr, left, right);
          left++;
          right--;
      }
  }
   //do your recursive call logic here
 }