用于对数组进行排序的递归函数

时间:2015-09-27 04:36:37

标签: java arrays recursion

我在构建对整数数组进行排序的递归函数时遇到了问题。此时,我不知道任何排序算法,这只是我的第二个CS课程。我在这里看到了很多解决方案,但这些解决方案的问题在于它们有循环或嵌套条件语句。在这个函数中,我不能使用循环或嵌套的if语句,只能使用单个if / else语句。

我知道你们不想简单地给出答案,因为它会带走学习经验,但如果我能指出正确的方向,我会非常感激。

6 个答案:

答案 0 :(得分:2)

编写递归函数-

  1. 编写一个函数签名,并假定它会用一些魔术来完成您的工作。

  2. 现在考虑基本条件,即在最小有效输入的情况下您的函数将做什么。

  3. 现在编写归纳步骤,您可以在较小的输入(通常)上调用相同的函数。

    def sorting(arr):
    
        #Base Condition
        if len(arr) == 1:
            return
    
        #Induction
        last_num = arr[-1]
        arr.pop()
        sorting(arr)
        insert(arr, last_num)
    
        return arr
    
    def insert(arr, last_num):
    
        #Base Condition
        if len(arr) == 0 or arr[-1] <= last_num:
            arr.append(last_num)
            return
    
        #Induction
        val = arr[-1]
        arr.pop()
        insert(arr, last_num)
        arr.append(val)
    

答案 1 :(得分:1)

查看Quicksort这是一种递归算法,可以完全满足你的需要。如果您需要帮助实现它,请告诉我。

答案 2 :(得分:0)

我希望你听说过分而治之的算法,我们将给定的数组除以特定的元素,称为&#39; pivot&#39;这样,阵列的下部分区小于枢轴,阵列的上部分区元素高于枢轴。 Quicksort是递归的最好例子之一。

答案 3 :(得分:0)

当然,有使用递归的合并排序和快速排序,并且是最着名的排序算法之一。既然你是初学者,那么从相对简单的开始会更好。以下是使用递归的选择排序算法。

int selection_sort(int num[], int n) //n=array length
{
    int max = num[0];   
    for (int i = 0; i < n; i++) {
        if (num[i] > max) 
            max = num[i];
        num[i] = num[n - 1];
        num[n - 1] = max;       
    }

    if (n > 0) {
        selection_sort(num, n - 1);
    }
}

答案 4 :(得分:0)

您可以使用最简单的算法之一,只需添加递归调用。例如。这是接近 InsertinSort 的算法。在每一步,我们看起来都是hi,而swap当前元素的当前元素大于最高元素。在每个循环的最后,hi指向arra的开头,这是分类的:

public final class BubbleSort {

    public static void sort(int[] arr) {
        sort(arr, arr.length);
    }

    private static void sort(int[] arr, int n) {
        if (n > 1) {
            for (int i = 0; i < n; i++)
                if (arr[i] > arr[n - 1])
                    swap(arr, i, n - 1);

            sort(arr, n - 1);
        }
    }

    private static void swap(int[] arr, int i, int j) {
        int tmp = arr[i];
        arr[i] = arr[j];
        arr[j] = tmp;
    }

    private SelectionSort() {
    }

}

答案 5 :(得分:0)

c ++程序中的简单答案

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

void insert(std::vector<int> &v,int num)
{
    if(v.size()==0 || v[v.size()-1]<=num)
    {
        v.push_back(num);
        return ;
    }
    int num2=v.back();
    v.pop_back();
    insert(v,num);
    v.push_back(num2);

}


void  sortv(vector<int> &v)
{
    if(v.size()==1)
    {
        return;
    }

    int num=v.back();
    v.pop_back();
    sortv(v);
    insert(v,num);

}

int main()
{
    std::vector<int> v={1,4,3,5,6,7,1,2,3};
    sortv(v);
    for (auto i : v) {
       cout<<i<<" ";
    }
}