silver-crow 发表于 2023-9-15 16:54:31

为什么函数quick_sort里的array[mid]=0而不是7?

#include <stdio.h>

void quick_sort(int length, int array[]);

void quick_sort(int length, int array[])
{
    int i, j, mid, num;
    mid = length / 2 - 1;
    for(i = 0, j = length - 1; i <= j;)
    {
      if(array < array)
      {
            i++;
      }

      if(array >= array)
      {
            j--;
      }

      if(array >= array && array < array)
      {
            num = array;
            array = array;
            array = num;
      }

      printf("i = %d, j = %d\n", i, j);
    }

    for(i = 0; i < length - 1; i++)
    {
      if(array > array)
      {
            quick_sort(length, array);
      }
    }
}

int main(void)
{
    int i;
    int array = {5, 2, 9, 4, 7, 8, 6, 3, 0, 1};

    quick_sort(10, array);

    for(i = 0; i < 10; i++)
    {
      printf("%d ", array);
    }

    return 0;
}
问题描述   为什么函数quick_sort里的array=0而不是7?

isdkz 发表于 2023-9-15 16:54:37

在这个快速排序算法中,中间值mid被初始化为数组长度length的一半减1,即mid=4。在排序开始时,首先比较array和array的值,发现array小于array,所以i自增1,此时i等于1。接下来比较array和array的值,发现array等于0,而0正好是数组中的一个元素。因此,此时mid所代表的值就是0,而不是7。所以,在这个算法中,mid所代表的值是会变化的,取决于数组的排序情况。

silver-crow 发表于 2023-9-15 16:58:28

isdkz 发表于 2023-9-15 16:54
在这个快速排序算法中,中间值mid被初始化为数组长度length的一半减1,即mid=4。在排序开始时,首先比较arr ...

array = 5, array = 9, array = 0
i = 0, j = 8
array = 5, array = 7, array = 0
i = 0, j = 7
array = 5, array = 3, array = 0
i = 0, j = 6

这个是我运行后的一部分结果,i的值始终为0没有变化

wangking2023 发表于 2023-9-28 15:54:37

666{:5_104:}
页: [1]
查看完整版本: 为什么函数quick_sort里的array[mid]=0而不是7?