c++ - C++中的递归排序函数

甚至可以在没有任何循环的情况下执行递归函数吗?

我正在研究没有任何循环的递归排序函数。该程序的任务是将整数从大到小排序。这是我的代码:

#include <bits/stdc++.h>
using namespace std;


void insert(vector<int> &v, int val) 
{   
    if(v.size() == 0 || v[v.size() +1] <= val) 
    {
        v.push_back(val);
        return;
    }
    
    int temp = v[v.size() -1];
    
    v.pop_back();
    
    insert(v, val);
    
    v.push_back(temp);      
    
}       

void recursiveSort(vector<int> &v)
{
    if(v.size() == 1)
    {
        return;
    }
    
    int val = v[v.size() -1];
    
    v.pop_back();
    recursiveSort(v);
    
    insert(v, val);
}   
        
    
    
int main() {


vector<int> v{8,2,3,6,5,8,7,9,1};



recursiveSort(v);

for(int x : v)
cout << x << " ";








    return 0;
    
}

输出应该如下所示:

Enter 4 integer values: 8 1 6 4
itr1:0 itr2:0 array:8,1,6,4
itr1:0 itr2:1 array:8,1,6,4
itr1:0 itr2:2 array:1,8,6,4
itr1:0 itr2:3 array:1,8,6,4
itr1:1 itr2:0 array:1,8,6,4
itr1:1 itr2:1 array:8,1,6,4
itr1:1 itr2:2 array:8,1,6,4
itr1:1 itr2:3 array:8,1,6,4
itr1:2 itr2:0 array:8,1,6,4
itr1:2 itr2:1 array:8,1,6,4
itr1:2 itr2:2 array:8,6,1,4
itr1:2 itr2:3 array:8,6,1,4
itr1:3 itr2:0 array:8,6,1,4
itr1:3 itr2:1 array:8,6,1,4
itr1:3 itr2:2 array:8,6,1,4
itr1:3 itr2:3 array:8,6,4,1

这就是代码在循环中的样子:

f o r ( int i t r 1 = 0 ; i t r 1 < 4 ; i t r 1++ ) {
f o r ( int i t r 2 = 0 ; i t r 2 < 4 ; i t r 2++ ) {
c o u t <<” i t r 1 : ”<< i t r 1 <<” i t r 2 : ”<< i t r 2 << ” a r r a y : ” ;
c o u t <<a r r [0]<<” , ”<<a r r [1]<<” , ”<<a r r [2]<<” , ”<<a r r [3]<< e n d l ;
i f ( arr [ i t r 1 ] > arr [ i t r 2 ] ) {
int temp = a r r [ i t r 1 ] ;
arr [ i t r 1 ] = arr [ i t r 2 ] ;
a r r [ i t r 2 ] = temp ;
}
}
}

回答1

是的,这是可能的。下面是一个使用递归函数没有任何循环的 https://www.geeksforgeeks.org/selection-sort/ 示例:

#include <stdio.h>
#include <iostream>
using namespace std;

void recursiveSort(int arr[], int i, int j);
const int arrayLength = 10;


int main()
{
    int arr[10] = {3, 6, 1, 0, 7, 2, 5, 4, 6, 9};
    cout << "before sorting: " << endl;
    for (auto element : arr){
        cout << element << ' ';
    }
    
    recursiveSort(arr, 0, 1);
    
    cout << endl << "after sorting: " << endl;
    for (auto element : arr){
        cout << element << ' ';
    }
}

void recursiveSort(int arr[], int i, int j)
{
    if (j == arrayLength){
        return;
    }

    if (arr[i] < arr[j]){
        int temp = arr[i];
        arr[i] = arr[j];
        arr[j] = temp;
    }

    recursiveSort(arr, i, j + 1);
    recursiveSort(arr, i + 1, i + 2);
}

相似文章

python - 无限 while 和 for loop Python

我的代码似乎陷入了无限循环。它应该遍历能量曲线,其中2个局部最小值之间的每个点都被添加到子列表teil_reaction中,然后移动到下一组点。此外,前一个子列表的最后一个点也是下一个子列表的第一个点...

随机推荐

最新文章