在C中按行对由数据结构组成的矩阵进行排序

Sort matrix composed of data structures by row in C

我正在尝试按行对数据结构矩阵进行排序,但我的代码不起作用,奇怪的是我没有收到错误并且矩阵在快速排序方法后没有改变:

#include<stdio.h>
#include<stdlib.h>
typedef struct{
    int id;
    int d;
}dist;
void quicksort_row_struct(dist matrixstruct[4][6], int primero, int ultimo, int row){
    int i, j, central;
    double pivote;
    central = (primero + ultimo)/2;
    pivote = matrixstruct[row][central].d;
    i=primero;
    j=ultimo;
    do{
        while(matrixstruct[row][i].d < pivote) i++;
        while(matrixstruct[row][j].d > pivote) j--;
        if(i<=j){
            double tmp;
            tmp = matrixstruct[row][i].d;
            matrixstruct[row][i].d=matrixstruct[row][j].d;
            matrixstruct[row][i].d=tmp;
            i++;
            j--;
        }
    }while(i<=j);
    if(primero < j)
        quicksort_row_struct(matrixstruct, primero, j, row);
    if(i <  ultimo)
        quicksort_row_struct(matrixstruct, i, ultimo, row );
}

现在,这是主要功能:

int main(){
    dist matrix_Struct[4][6];
    for(int i=0; i<4; i++){
        for(int j=0; j<6; j++){
            matrix_Struct[i][j].id=j;
            matrix_Struct[i][j].d=rand()%100;
           }
        }
    for(int i=0; i<4; i++){
        printf("\n");
        for(int j=0; j<6; j++){
            printf("\t%d -> %d", matrix_Struct[i][j].id, matrix_Struct[i][j].d);
                              }
                          }
           printf("\n");
      /*Here, I try to sort each row*/
    for(int i=0; i<4; i++){
              quicksort_row_struct(matrix_Struct, 0, 5, i);
              }
    for(int i=0; i<4; i++){
        printf("\n");
            for(int j=0; j<6; j++){
                printf("\t%d -> %d", matrix_Struct[i][j].id, matrix_Struct[i][j].d);
                                }
                             }
}

这种在矩阵行中快速排序的想法在整数矩阵中工作得很好。但是,我需要将其概括为结构矩阵。

任何帮助将不胜感激!!

问题与排序项是结构无关;这是错误的交换代码:

            tmp = matrixstruct[row][i].d;
            matrixstruct[row][i].d=matrixstruct[row][j].d;
            matrixstruct[row][i].d=tmp;

最后一行应该是

            matrixstruct[row][j].d=tmp;

当数据本身是int时,你将pivotetmp声明为double也很奇怪,但是对于[=15的范围=] 示例中的值它仍然有效。