为什么这种递归选择排序不起作用
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或者使用打印语句来找出你的代码哪里出错了。
我尝试 运行 代码,但它卡住了。没有错误没有警告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或者使用打印语句来找出你的代码哪里出错了。