< p>这个代码不是正确的C++,让我指出一个问题:,c++,arrays,2d,C++,Arrays,2d" /> < p>这个代码不是正确的C++,让我指出一个问题:,c++,arrays,2d,C++,Arrays,2d" />

C+中二维数组的气泡排序+; 我试图用冒泡排序法对C++中的所有二维数组元素排序,但我想不出来。 #include <iostream> #include <stdio.h> using namespace std; int main (){ int x[4][4],i,k,j; for(i=0;i<4;i++) for(j=0;j<4;j++) cin>>x[i][j]; cout<<"\n\n"; for(i=0;i<4;i++) for(j=0;j<3;j++) for(k=j+1;k<4;k++) if(x[i][j]>x[i][k]) { int temp = x[i][j]; x[i][j] = x[i][k]; x[i][k] = temp; } for(i=0;i<4;i++) { for(j=0;j<4;j++) cout<<x[i][j]<<"\t"; cout<<"\n\n"; } cout<<endl; return 0; } #包括 #包括 使用名称空间std; int main(){ int x[4][4],i,k,j; (i=0;ix[i][j]; c> < p>这个代码不是正确的C++,让我指出一个问题:

C+中二维数组的气泡排序+; 我试图用冒泡排序法对C++中的所有二维数组元素排序,但我想不出来。 #include <iostream> #include <stdio.h> using namespace std; int main (){ int x[4][4],i,k,j; for(i=0;i<4;i++) for(j=0;j<4;j++) cin>>x[i][j]; cout<<"\n\n"; for(i=0;i<4;i++) for(j=0;j<3;j++) for(k=j+1;k<4;k++) if(x[i][j]>x[i][k]) { int temp = x[i][j]; x[i][j] = x[i][k]; x[i][k] = temp; } for(i=0;i<4;i++) { for(j=0;j<4;j++) cout<<x[i][j]<<"\t"; cout<<"\n\n"; } cout<<endl; return 0; } #包括 #包括 使用名称空间std; int main(){ int x[4][4],i,k,j; (i=0;ix[i][j]; c> < p>这个代码不是正确的C++,让我指出一个问题:,c++,arrays,2d,C++,Arrays,2d,为此: int temp = x[i][j]; x[i][j] = x[i][k]; x[i][k] = temp; C++有一个内置函数,std::swap,在headeralgorithm中声明,因此您可以使用: std::swap(x[i][j], x[i][k]); 现在,对于算法,如果你输入这样一个矩阵: 16 8 3 2 4 5 15 10 11 12 13 14 1 6 9 7 for (int i = 0; i < 4; i++) { for (int j =

为此:

int temp = x[i][j];
x[i][j] = x[i][k];
x[i][k] = temp;
C++有一个内置函数,
std::swap
,在header
algorithm
中声明,因此您可以使用:

std::swap(x[i][j], x[i][k]);
现在,对于算法,如果你输入这样一个矩阵:

16 8 3 2
4 5 15 10
11 12 13 14
1 6 9 7
for (int i = 0; i < 4; i++) {
    for (int j = 0; j < 4; j++) {
        int m = i;
        int n = j + 1;
        while (true) {
            if (n == 4) {
                n = 0;
                m++;
                if (m == 4) break; // Stopping condition: n == 4 && m == 4
            }

            if (x[i][j] > x[m][n]) std::swap(x[i][j], x[m][n]);

            n++;
        }
    }
}
它应该输出

1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
没什么新鲜事

排序算法应该如下所示:

16 8 3 2
4 5 15 10
11 12 13 14
1 6 9 7
for (int i = 0; i < 4; i++) {
    for (int j = 0; j < 4; j++) {
        int m = i;
        int n = j + 1;
        while (true) {
            if (n == 4) {
                n = 0;
                m++;
                if (m == 4) break; // Stopping condition: n == 4 && m == 4
            }

            if (x[i][j] > x[m][n]) std::swap(x[i][j], x[m][n]);

            n++;
        }
    }
}
for(int i=0;i<4;i++){
对于(int j=0;j<4;j++){
int m=i;
int n=j+1;
while(true){
如果(n==4){
n=0;
m++;
if(m==4)break;//停止条件:n==4&&m==4
}
如果(x[i][j]>x[m][n])std::swap(x[i][j],x[m][n]);
n++;
}
}
}

您可以查看以下内容,这可能会让人惊讶,bu工作正常,但使用qsort而不是冒泡排序

#include <iostream>
#include <stdio.h>
#include <stdlib.h>
using namespace std;
int myfunction (int* i,int* j) { return (*i>*j); }
int main (){    
   int x[4][4],i,k,j;
   for(i=0;i<4;i++)
      for(j=0;j<4;j++)
         x[i][j] = random()%1000;

   qsort((void*)x, 16, sizeof(int),(int (*)(const void*,const void*))myfunction);

   for(i=0;i<4;i++) {
      for(j=0;j<4;j++)
          cout<<x[i][j]<<"\t";
      cout<<"\n\n";       
   }
}
#包括
#包括
#包括
使用名称空间std;
int-myfunction(int*i,int*j){return(*i>*j);}
int main(){
int x[4][4],i,k,j;

对于(i=0;谢谢,先生,首先我知道swap函数,但我不想使用它,我的问题是将整个数组从[0][0]排序到[last row][last column],但您的代码中有一个错误,请查看该输出,不正确!@user3457718我已经测试了我发布的代码,它工作正常。那么正确的输出应该是什么?请查看此链接。您的代码有一个大问题,正确的一个是谢谢,先生,但是上面的代码很难理解,但是我想对所有元素进行排序,而不使用使用任何函数,我想我只是添加了一个循环,但在哪里和如何添加?我不同意这是很难理解的——但是如果你认为这对编译器优化和CPU管道内衬不利,那么你可能是对的。我添加了两个版本的纯循环,同样有效……谢谢你,先生,这就是我需要的第二个循环,但第一个循环更有效nfused,但生成它或旧Answare,因为我能在不到10分钟内像那样思考吗?!但我喜欢它再次感谢您的帮助,请看。