在C中递归地添加排序数组中的元素

问题描述 投票:2回答:1

任务是通过两种方式将元素插入每个矩阵行:迭代和迭代。我已经完成了迭代,但是不了解如何将其更改为递归。感谢任何帮助。这是我的函数,n-为行元素编号,key-要在行中实现的值:

void insertSorted(int arr[], int n, int key)
{
    int i;
    for (i = n - 1; (i >= 0 && arr[i] > key); i--)
        arr[i + 1] = arr[i];

    arr[i + 1] = key;
}

这是代码:

#define _CRT_SECURE_NO_WARNINGS

#include <stdio.h>
#define MAX 10

void insertSorted(int arr[], int n, int key)
{
    int i;
    for (i = n - 1; (i >= 0 && arr[i] > key); i--)
        arr[i + 1] = arr[i];

    arr[i + 1] = key;
}

int main()
{
    int arr[MAX][MAX];
    int row, col;
    int i, key;

    printf("Enter the matrix size:\nRows: ");
    scanf("%d", &row);
    printf("Cols: ");
    scanf("%d", &col);

    printf("\nEnter %dx%d matrix with sorted rows:\n", row, col);
    for (int i = 0; i < row; i++)
        for (int j = 0; j < col; j++)
            scanf("%d", &arr[i][j]);

    printf("\nBefore Insertion:\n");
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < col; j++)
            printf("%d  ", arr[i][j]);
        puts(" ");
    }
    printf("\nEnter the number to insert in rows: ");
    scanf("%d", &key);

    for (int i = 0; i < row; i++)              
        insertSorted(arr[i], col, key);
    col++;                                   

    printf("\nAfter Insertion:\n");
    for (int i = 0; i < row; i++) {
        for (int j = 0; j < col; j++)
            printf("%d  ", arr[i][j]);
        puts("");
    }
    return 0;
}
c arrays recursion add insertion
1个回答
1
投票
void RecursiveInsertSorted(int arr[], int n, int key)
{
    if(n==0)
        arr[n]=key;
        return;
    if(arr[n-1]>key){
        arr[n]=arr[n-1];
        RecursiveInsertSorted(arr,n-1,key);
    }
    else{
        arr[n]=key;
        return;
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.