如何使用qsort对2D Matrix的行进行排序?

时间:2017-10-30 13:49:58

标签: c qsort

我的许多同事问我是否有可能对2D阵列的每一行进行排序,方法是使用qsort()中的<stdlib.h>函数来排列如下矩阵:

 5,  8,  7,  6, 
 1,  4,  3,  2, 
11, 12, 10,  9, 

成像:

 5,  6,  7,  8, 
 1,  2,  3,  4, 
 9, 10, 11, 12, 

2 个答案:

答案 0 :(得分:1)

问题的解决方案如下所示:

#include <stdio.h>   // scanf() printf()
#include <stdlib.h>  // qsort()

int compare (const void *a, const void *b)
{
  int x = *(int *)a;
  int y = *(int *)b;

  if (x<y) return -1; 
  if (x>y) return 1; 
  return 0;
}

int main()
{
  // Syntax of a 2D Array: array[rows][cols]
  int rows = 3, cols = 4;
  int array[3][4] = { {5,8,7,6,}, {1,4,3,2}, {11,12,10,9} };

  // Print the matrix unsorted:
  printf("\nUnsorted rows:\n");
  for (int i = 0; i < rows; i++) {
    for (int j = 0; j < cols; j++) {
      printf("%2d, ", array[i][j]);
    }
    printf("\n");
  }

  // Sort the matrix using qsort:
  for(int j = 0; j < rows; j++)
    qsort(array[j], cols, sizeof(int), compare);

  // Print the matrix sorted:
  printf("\nSorted rows:\n");
  for (int i = 0; i < rows; i++) {
    for (int j = 0; j < cols; j++) {
      printf("%2d, ", array[i][j]);
    }
    printf("\n");
  }

  return 0;
}

<强>输出

Unsorted rows:
 5,  8,  7,  6, 
 1,  4,  3,  2, 
11, 12, 10,  9, 

Sorted rows:
 5,  6,  7,  8, 
 1,  2,  3,  4, 
 9, 10, 11, 12, 

感谢 flukey 提供的有用答案: Qsorting 2d pointer arrays

答案 1 :(得分:0)

帕特里克,

想象一下2d数组是许多1d数组的组合。

使用2个循环对每个1d数组(行)执行排序。一个循环迭代(列)和一个迭代1d数组。在第二个内循环中,您可以执行排序。