我正在尝试对一行二维数组进行排序。但我无法实现它。
例如:
7 6 5
5 7 6
8 2 9
2 3 4
像这样:
5 6 7
5 6 7
2 8 9
2 3 4
下面是我的代码:
void sort(int *a,int num){
int i,j,temp;
for(i=0;i<num-1;i++){
for (j=0;j<num-i-1;j++){
if (*((a+i*3)+j)>*((a+i*3)+j+1)){
temp=*((a+i*3)+j);
*((a+i*3)+j)=*((a+i*3)+j+1);
*((a+i*3)+j+1)=temp;
}
}
}
for(i=0;i<num;i++){
for(j=0;j<3;j++)
printf("%d ",*((a+i*3)+j));
printf("\n");
}
}
上面代码的输出:
6 5 5
7 6 7
2 8 9
2 3 4
谁能告诉代码中的问题是什么?提前致谢。:D
编辑:那么上面的代码应该是这样的吗?
void sort(int *a,int num){
int i,j,temp;
for(i=0;i<num-1;i++){
for (j=0;j<num-i-1;j++){
if (*(*(a+i)+j)>*(*(a+i)+j+1)){
temp=*(*(a+i)+j);
*(*(a+i)+j)=*(*(a+i)+j+1);
*(*(a+m)+j+1)=temp;
}
}
}
}
主要有两个问题:
1)循环没有运行n次,因此for循环中的条件应该改为i < num
而不是i < num - 1
跳过最后一行
2)从您的代码看来,您想使用冒泡排序技术。排序是 O(n^2),这就是为什么需要交换 if 语句为每个元素运行 (n - 1) 次,因此您应该在 j-for 循环中再包含一个 for 循环。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句