我试图按行对数据结构矩阵进行排序,但我的代码不起作用,奇怪的是我没有得到错误,矩阵也没有快速排序方法后改变:
#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);
}
}
}
矩阵行中这种快速排序的想法在整数矩阵中运行良好。但是,我需要将其概括为结构矩阵。
任何帮助都将受到高度赞赏!!
答案 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
时,您将tmp
和double
声明为int
,但int
的范围也很奇怪您的示例中的值仍然有效。