利用冒泡循环对二维数组所有元素排序

  • 利用一维数组的冒泡思想:

               

            在一维数组中,想要实现元素的排序,会利用相邻的两元素进行比较,若前大后小,则交换两元素的思想(最后得出的为升序数组)。

  • 利用这种思想,当数组为二维时:

                          将二维数组当作一个大的一维数组,利用一维数组的冒泡思想去进行排序。

需要注意的是:

          1.在二维数组中,我们无法像在一维数组冒泡一样利用内外循环的  i,j来准确的确定要对比的两元素的下标。因此我们另设  x,  y 来对元素进行确定。(x 表示行标,y 表示列标)

         2.在二维数组中,行,列标取值的变化需要注意。

                    例如:在3x3的二维数组中:

                                  

 

          当比较a [0][2]与a[1][0]两个元素时,(即行最尾端元素与下一行最前端元素比较)此时要注意相关行标:x  与相关列标 :y  的变化

if(y==m-1){          //此if用于判断,前一行的最后一个元素与下一行的第一个
				int p=x;         //元素比较
				int q=y;
				x++;
				y=0;
				if(a[p][q]>a[x][y]){
					int temp=a[x][y];
					a[x][y]=a[p][q];
					a[p][q]=temp;
				}

             m 表示的是列的大小,当y==m-1。(3x3的二维数组中,当y==2时)

              比较行最尾端元素与下一行最前端元素。想要得到下一位元素位置,则列标要被赋值为0(因为此时已经到了某行的最尾列)。而行标要进行自加(移到了下一行)

完整代码:     

#include <iostream>
using namespace std; 
int main(){
	int a[][4]={61,50,66,93,45,77,100,89,37,67,96,98,80,67,59,84};
	
	int all=sizeof(a)/sizeof(int);   //数组长度
	
	int n=sizeof(a[0])/sizeof(a[0][0]);    //n为行数
	
	int m=all/n;  //m为列数 
	
	for(int i=0;i<n*m;i++){
		int x=0;
	    int y=0;
		for(int j=0;j<n*m-1-i;j++){
			if(y==m-1){          //此if用于判断,前一行的最后一个元素与下一行的第一个
				int p=x;         //元素比较
				int q=y;
				x++;
				y=0;
				if(a[p][q]>a[x][y]){
					int temp=a[x][y];
					a[x][y]=a[p][q];
					a[p][q]=temp;
				}	
			}
			else{
				if(a[x][y]>a[x][y+1]){
					int temp=a[x][y+1];
					a[x][y+1]=a[x][y];
					a[x][y]=temp;
				}
				y++;
			}
		}  
		//cout<<endl;
	}
	for(int i=0;i<n;i++){
		for(int j=0;j<m;j++){
			cout<<a[i][j]<<"\t";
		}
		cout<<endl;
	}
	return 0;
}

输出结果:  

 第一次写这种,要是写的不好请见谅,感觉文中废话有点多。主要是想讲详细一点,希望对你们有帮助。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值