C - 如何在组中对一维数组中的数字进行排序?

时间:2016-12-05 22:22:06

标签: c arrays sorting

我有一个数组,我需要在组中对该数组中的数字进行排序。例如,如果我有9个数字而我的P是3,我需要按降序排序三个数字,然后另外3个和另外3个。

示例:

123 124 125 222 223 224 333 334 335

M是组数,P是组中的数字量。如果M是3而P也是3则需要给出答案,如

125 124 123 224 223 222 335 334 333

这就是我提出的,但它不起作用。

void sortgroup(int M, int P, int A[i])
{
      int c, d, swap, z = 0;
      for (c = z ; c < ( P*M - 1 + z ); c++)
      {
        for (d = z ; d < P + z - 1; d++)
        {
          if (A[d] < A[d+1])
          {
            swap       = A[d];
            A[d]   = A[d+1];
            A[d+1] = swap;
          }
        }
      z = P + z;
      }
}

1 个答案:

答案 0 :(得分:5)

你的函数sortgroup试图一次做太多 - 而且你有很多局部变量,都是以密码命名的。

首先,解决问题:将输入数组分解为长度为M的{​​{1}}块/组,然后分别处理每个块的排序,这将使代码更清晰。

抽象地:

P

请注意我如何使用非神秘的变量名称,并且从将数组拆分成组的初始问题中删除了对组进行排序的子问题。

此外,这将是一个想法to add input validation

void sortGroups(int* array, size_t arrayLength, size_t groupLength, size_t groupCount) {

    // get each group:
    for( size_t i = 0; i < arrayLength; i += groupLength ) {

        size_t start = i;
        size_t end   = min( i + groupLength, arrayLength );

        sortSingleGroup( array, start, end );
    }
}

void sortSingleGroup(int* array, size_t start, size_t end) {

    // sort the numbers in the range array[start] to array[end-1]
    // there are plenty of sorting libraries/functions you can download from the interwebs to do this
}