C语言 使用指针对二维数组中的一行元素进行排序



我正在尝试对一行二维数组进行排序。但我无法实现它。

例如:

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 循环。

代码太复杂了,所以你在其中犯了很多小错误。

您应该以某种方式对每行进行单独的排序,如下所示:

for (row = 0; row < num; row++) {
sort_row(a + row * 3);
}

该函数sort_row只对一行进行排序,因此编写和测试会更容易(顺便说一句,我将i的不起眼的名称替换为row(。

函数sort_row应该执行正常的气泡排序。您甚至可以改用标准库qsort(用于测试目的(。

请注意,标准气泡排序算法是使用两个嵌套循环实现的。如果要在没有单独的sort_row函数调用的情况下实现代码,则需要三个嵌套循环。

相关内容

  • 没有找到相关文章

最新更新