c - 如何在二维数组中正确实现插入排序算法?
问题描述
我需要根据数组的第一行对二维数组的列进行排序。这是我排序前的二维数组:
cargo
AFADA
DAFGF
DXAFA
DDFFX
GFXF
这是我的二维数组的图像:
acrgo
FAADA
ADFGF
XDAFA
DDFFX
FGXF
正确的输出如下所示
acgor
FADAA
ADGFF
XDFAA
DDFXF
FGF X
. 这是我使用插入排序算法对数组进行排序的函数的代码
void sort(char** newTable, int row, int col) {
for (int top = 1; top < col; col++) {
char item = newTable[0][top];
int i = top;
while (i > 0 && item < newTable[0][i - 1]) {
for (int j = 0; j < row + 1; j++) {
char temp = newTable[j][i];
newTable[j][i] = newTable[j][i - 1];
newTable[j][i - 1] = temp;
}
i--;
}
newTable[0][i] = item;
}
}
我这样调用函数
sort(newTable, row, strlen(key));
这里,key 是字符串 'cargo'
新表的定义:
char** newTable = (char**)calloc(row + 1, sizeof(char*));
for (int i = 0; i < row + 1; i++) {
newTable[i] = (char*)calloc(strlen(key), sizeof(char));
}
解决方案
newTable
确实是一个指针数组而不是二维数组,所以使用char **newTable
是有意义的。
主要错误接近于一个错字:在 的第一个for
循环中sort
,col
当您想要增加 时,您会增加top
。最后一行newTable[0][i] = item;
是没用的。
这应该可以工作(即使循环for (int j = 0; j < row + 1; j++)
表明 row 不是行数,newTable
而只是 *additional 行的数量):
void sort(char** newTable, int row, int col) {
for (int top = 1; top < col; top++) {
char item = newTable[0][top];
int i = top;
while (i > 0 && item < newTable[0][i - 1]) {
for (int j = 0; j < row + 1; j++) {
char temp = newTable[j][i];
newTable[j][i] = newTable[j][i - 1];
newTable[j][i - 1] = temp;
}
i--;
}
}
}
推荐阅读
- node.js - Sequelize-typescript include on Many to Many 只包括许多结果之一
- r - dplyr 和完全加入选项的一些问题
- angular - 角度辅助路由抛出错误
- sql-server - 为什么此第三个查询不返回第一个和第二个查询的总行数?
- c# - Linq Select 中 SubSelect 的语法
- html - html图像不会加载到网页上
- java - 不太了解从 Firebase 数据库中检索标记位置
- fortran - Sin 函数的值不正确
- c++ - 使用 C++ 实现的 UDP 客户端类的多线程问题
- git - 是否有必要在`git checkout`之前运行`git stash push`