首页 > 解决方案 > 如何在二维数组中正确实现插入排序算法?

问题描述

我需要根据数组的第一行对二维数组的列进行排序。这是我排序前的二维数组:

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));
    }

标签: carraysinsertion-sort

解决方案


newTable确实是一个指针数组而不是二维数组,所以使用char **newTable是有意义的。

主要错误接近于一个错字:在 的第一个for循环中sortcol当您想要增加 时,您会增加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--;
         }
     }
 }

推荐阅读