选择在C++中递归排序
Selection sort recursively in C++
我的递归选择排序函数似乎产生了一个错误。如果有人帮忙修理这只野兽,我们将不胜感激。
#include <iostream>
#include <algorithm>
using namespace std;
void selection_sort(int[],int);
int main()
{
int a[5] = {5,4,3,2,1};
selection_sort(a,5);
return 0;
}
void selection_sort(int arr[],int n){
int max_pos;
if(n == 0) return;
int max = *max_element(arr,arr+n);
for(int i = 0; i < n;i++){
if(arr[max] == max){
max_pos = i;
}
}
swap(arr[max_pos],arr[n-1]);
selection_sort(arr,n--);
}
selection_sort(arr,n--);
在您的函数上下文中(因为这是最后一条语句),这与完全相同
selection_sort(arr,n);
由于函数中未修改n
,导致无限递归。你可能想要的是:
selection_sort(arr,n-1);
此外,这是错误的:
if (arr[max] == max)
您希望索引为i
,而不是max
。
if (arr[i] == max)
很明显,这个语句
if(arr[max] == max){
无效。使用最大元素作为索引没有任何意义。我想你指的是下面的
int *max = max_element(arr,arr+n);
iter_swap( max, arr + n - 1 );
相关文章:
- 使用列表 STL 递归进行插入排序
- 在气泡排序中使用递归
- 运行合并排序递归算法时EXC_BAD_ACCESS错误
- 合并排序与递归
- 递归合并排序算法实现
- 从递归向后选择排序函数调用 max 和交换函数
- 递归在合并排序中行为异常
- 递归定义数组中的数据对齐和排序
- 为什么我的递归快速排序算法有如此不平衡的分区
- C :重复的变化的递归功能,按不同字母数量排序
- 递归代码快速排序
- 无法让我的代码正确排序用户输入的数字数组(使用递归)
- 合并排序中的递归
- C 不需要带有递归排序算法的数组长度
- C++中的无限递归快速排序
- 使用选择算法编译时递归排序
- 递归合并排序错误
- 随机输出与C++递归合并排序
- 选择在C++中递归排序
- C++ 递归排序通过分而治之和迭代排序