按对角线进行矩阵排序

class Solution {

public:

void bubbleSort1(vector<int>& arr) {

int n = arr.size();

for (int i = 0; i < n - 1; i++) {

for (int j = 0; j < n - i - 1; j++) {

if (arr[j] < arr[j + 1]) {

// 交换元素

int temp = arr[j];

arr[j] = arr[j + 1];

arr[j + 1] = temp;

}

}

}

}

void bubbleSort2(vector<int>& arr) {

int n = arr.size();

for (int i = 0; i < n - 1; i++) {

for (int j = 0; j < n - i - 1; j++) {

if (arr[j] > arr[j + 1]) {

// 交换元素

int temp = arr[j];

arr[j] = arr[j + 1];

arr[j + 1] = temp;

}

}

}

}

vector<vector<int>> sortMatrix(vector<vector<int>>& grid) {

if(grid.empty() || grid[0].empty()){

return grid;

}

int n=grid.size();//表示行数

int m=grid[0].size();//表示列数

//处理对角线及以下的部分

for(int i=0;i<n;i++){

vector<int>temp;

for(int j=0,k=i;j<grid.size()-i&&k<n;j++,k++){

temp.push_back(grid[k][j]);

}

bubbleSort1(temp);

for(int j=0,k=i,jdx=0;j<grid.size()-i&&k<n;j++,k++,jdx++){

grid[k][j]=temp[jdx];

}

}

//处理对角线以上的部分

for(int j=1;j<m;j++){

vector<int>temp;

for(int i=0,k=j;i<grid.size()-j&&k<m;i++,k++){

temp.push_back(grid[i][k]);

}

bubbleSort2(temp);

for(int i=0,k=j,idx=0;i<grid.size()-j&&k<m;i++,k++,idx++){

grid[i][k]=temp[idx];

}

}

return grid;

}

};

相关推荐
Larry_Yanan1 小时前
QML学习笔记(四十二)QML的MessageDialog
c++·笔记·qt·学习·ui
寂静山林1 小时前
UVa 10228 A Star not a Tree?
算法
Neverfadeaway1 小时前
【C语言】深入理解函数指针数组应用(4)
c语言·开发语言·算法·回调函数·转移表·c语言实现计算器
R-G-B1 小时前
【35】MFC入门到精通——MFC运行 不显示对话框 MFC界面不显示
c++·mfc·mfc运行 不显界面·mfc界面不显示
Madison-No72 小时前
【C++】探秘vector的底层实现
java·c++·算法
晚风残2 小时前
【C++ Primer】第十二章:动态内存管理
开发语言·c++·c++ primer
Swift社区2 小时前
LeetCode 401 - 二进制手表
算法·leetcode·ssh
派大星爱吃猫2 小时前
顺序表算法题(LeetCode)
算法·leetcode·职场和发展
liu****2 小时前
8.list的模拟实现
linux·数据结构·c++·算法·list
保持低旋律节奏2 小时前
C++ stack、queue栈和队列的使用——附加算法题
c++