我在构建对整数数组进行排序的递归函数时遇到了问题。此时,我不知道任何排序算法,这只是我的第二个CS课程。我在这里看到了很多解决方案,但这些解决方案的问题在于它们有循环或嵌套条件语句。在这个函数中,我不能使用循环或嵌套的if语句,只能使用单个if / else语句。
我知道你们不想简单地给出答案,因为它会带走学习经验,但如果我能指出正确的方向,我会非常感激。
答案 0 :(得分:2)
编写递归函数-
编写一个函数签名,并假定它会用一些魔术来完成您的工作。
现在考虑基本条件,即在最小有效输入的情况下您的函数将做什么。
现在编写归纳步骤,您可以在较小的输入(通常)上调用相同的函数。
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<<" ";
}
}