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

时间:2015-09-04 13:51:50

标签: c matrix typedef quicksort

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

#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);
                                }
                             }
}

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

任何帮助都将受到高度赞赏!!

1 个答案:

答案 0 :(得分:0)

问题与作为结构的排序项无关;这是糟糕的交换代码:

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

最后一行应该是

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

当数据本身为pivote时,您将tmpdouble声明为int,但int的范围也很奇怪您的示例中的值仍然有效。