在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
时,你将pivote
和tmp
声明为double
也很奇怪,但是对于[=15的范围=] 示例中的值它仍然有效。
我正在尝试按行对数据结构矩阵进行排序,但我的代码不起作用,奇怪的是我没有收到错误并且矩阵在快速排序方法后没有改变:
#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
时,你将pivote
和tmp
声明为double
也很奇怪,但是对于[=15的范围=] 示例中的值它仍然有效。