为什么这种递归选择排序不起作用

Why is this recursive selection sort not working

我尝试 运行 代码,但它卡住了。没有错误没有警告nothing.Is有没有更好的方法来编写递归选择排序?

#include <iostream>

using namespace std;

void scan(int *arr, int size){
    for(int i = 0; i < size; i++){
        cin >> arr[i];
    }
}

void print(int *arr, int size){
    for(int i = 0; i < size; i++){
        cout << arr[i] << " ";
    }
    cout << "\n";
}

void swap(int *p1, int *p2){
    int temp = *p1;
    *p1 = *p2;
    *p2 = temp;
}

void insertion(int *arr, int size){
    if(size <= 1)return;
    int i, max = size - 1;
    for(int i = 0; i < size; i++){
        if(arr[i]  > arr[max])max = i;
    }
    swap(&arr[max], &arr[i]);
    insertion(arr, size - 1);
}

int main(){
    int *arr;
    int size;
    cout << "Enter the size of the array - ";
    cin >> size;
    arr = (int*)malloc(size*sizeof(int));
    cout << "Enter the elements of the array - ";
    scan(arr, size);
    print(arr, size);
    insertion(arr, size);
    print(arr, size);
}

我觉得递归的基本情况有问题。你一般是怎么解决这类问题的。

您的代码中有 1 个小问题。在插入函数中调用swap函数时必须用&arr[max]和&arr[size-1]调用,也可以用i-1 ,因为这里i的值是size

插入函数的附加代码

void insertion(int *arr, int size){
    if(size <= 1)return;
    int i, maxIndex = 0;
    for(i = 0; i < size; i++){
        if(arr[i] > arr[maxIndex]) maxIndex = i;
    }

    swap(&arr[maxIndex], &arr[size-1]);
    insertion(arr, size - 1);
}

调试的方式有很多种,你可以学习使用gnu调试器gdb或者使用打印语句来找出你的代码哪里出错了。