毛毛虫爬行中 发表于 2018-4-8 20:30:56

小甲鱼快速排序代码的不完整性

本帖最后由 毛毛虫爬行中 于 2018-4-8 20:35 编辑

这个代码在基数小的排序(小于50个数左右)中看不出任何弊端,超过50之后运行时间会慢慢变大,已经变成慢排了。达到1000以上的时候就崩溃了,程序出错。所以还是需要改进的,对于边界和效率没有控制好,有太多重复。/**
* @brief 交换元素
*
* @param array
* @param i
* @param j
*/
void Swap (int array[], int i, int j)
{
    int temp = array;
    array = array;
    array = temp;
}

/**
* @brief 快速排序
*
* @param array
* @param size
*/
void QuickSort (int array[], int left, int right)
{
    int i = left;
    int j = right;
    int pivot = array[(left + right) /2];

    while (i <= j)
    {
      while (array < pivot)
      {
            i++;
      }
      while (array > pivot)
      {
            j--;
      }
      if (i <= j)
      {
            Swap (array, i, j);
            i++;
            j--;
      }
      if (i < right)
      {
            QuickSort(array, i, right);
      }
      if (j > left)
      {
            QuickSort(array, left, j);
      }
    }
}

//测试函数
void Sort_test2 ()
{
    int sorted = 0;
    int size = 2048;
    int MAX = 1024;

    int * array = NULL;
    array = (int *)malloc (sizeof (int) * size);
    GenerateDate (array, size, MAX);
    PrintData (array, size);

    QuickSort (array, 0, size-1);
    printf ("\n#########\n");
    sorted = PrintData (array, size);

    if (!array)
      free(array);
    array = NULL;
}

int main()
{
    Sort_test2();
    return 0;
}
页: [1]
查看完整版本: 小甲鱼快速排序代码的不完整性