使用递归方法实现数组排序(C++)

本文分享了一组C++重载排序函数的实现,包括对不同数量整数及整数数组的从大到小排序,特别介绍了使用递归方法进行数组排序的技巧,并提供了完整的代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近在学习C++,顺便复习一下C语言的知识,提高下自己的编程能力,很多东西不用就忘记了。
这其实是一道很简单的题,自己比较菜,一些点想了蛮久,记录一下。
题目
编写一组重载的排序函数,可以对两个整数、三个整数、四个整数、整数数组从大到小排序,函数名为sort,其中数组排序应使用递归的方法,另补充print函数,在一行显示排序后的数组元素。
用递归的方法进行数组排序:题目要求从大到小,所以对一个长度为n的数组,经过一轮排序找出最小的数放在a[n-1];对于长度为n-1的数组,经过一轮遍历比较找出最小的数放在a[n-2]……不断向前,从而达到递归的效果。
代码如下:

#include <iostream>
#include <cmath>
#include <string>
using namespace std;

void sort(int &m, int &n)
{
	int tmp;
	if (m < n)
	{
		tmp = n;
		n = m;
		m = tmp;
	}
}

void sort(int &m, int &n,int &p)
{
	sort(m, n);
	sort(m, p);
	sort(n, p);
}

void sort(int &m, int &n, int &p, int &q)
{
	sort(m, n, p);
	sort(m, n, q);
	sort(n, p, q);
}

void sort(int a[], int n)
{
	int tmp;
	for (int i = 0; i < n; i++)
	{
		if (a[i] < a[n - 1])
		{
			tmp = a[i];
			a[i] = a[n - 1];
			a[n - 1] = tmp;
		}
	}
	if (n >2)
	{
		sort(a, n - 1);
		n--;
	}	
}

void print(int a[], int n)
{
	cout << a[0];
	for (int i = 1; i < n; i++)
	{
		cout << " " << a[i];
	}
}

int main()
{
	int a, b, c, d;
	int data[100];
	int k, n, i;
	cin >> k;
	switch (k)
	{
	case 1:
		cin >> a >> b;
		sort(a, b);
		cout << a << " " << b << endl;
		break;
	case 2:
		cin >> a >> b >> c;
		sort(a, b, c);
		cout << a << " " << b << " " << c << endl;
		break;
	case 3:
		cin >> a >> b >> c >> d;
		sort(a, b, c, d);
		cout << a << " " << b << " " << c << " " << d << endl;
		break;
	case 4:
		cin >> n;
		for (i = 0; i < n; i++)
		{
			cin >> data[i];
		}
		sort(data, n);
		print(data, n);
		break;
       default:break;
	}
	return 0;
}

尤其要注意的就是 void sort(int a[], int n) 函数中

    if (n >2)
	{
		sort(a, n - 1);
		n--;
	}	

用 if 不用 while ,脑子懵了……

虽然傻 但还是不能放弃啊,给自己加个油咯~

### 使用递归算法实现数组排序方法 递归是一种常用的编程技术,可以通过自我调用来解决问题。对于数组排序而言,可以采用多种基于递归的算法来完成任务,例如冒泡排序、快速排序以及全排列等。 #### C++使用递归实现冒泡排序 下面是一个经典的递归版本冒泡排序实现代码: ```cpp #include <iostream> using namespace std; void bubbleSort(int arr[], int n) { if (n == 1) { // 如果只剩下一个元素,则无需继续比较 return; } for (int i = 0; i < n - 1; i++) { // 遍历当前未排序部分 if (arr[i] > arr[i + 1]) { // 若前一个数大于后一个数则交换位置 swap(arr[i], arr[i + 1]); } } bubbleSort(arr, n - 1); // 对剩余的部分再次执行相同的逻辑 } int main() { int arr[] = {64, 34, 25, 12, 22, 11, 90}; int n = sizeof(arr) / sizeof(arr[0]); bubbleSort(arr, n); cout << "Sorted array: \n"; for (int i = 0; i < n; i++) { cout << arr[i] << " "; } cout << "\n"; return 0; } ``` 此代码展示了如何利用递归来逐步缩小问题规模直到解决整个排序过程[^1]。 #### Java 中使用递归生成数组全排列 如果目标是从给定数组中找出所有的可能顺序组合(即全排列),那么也可以借助递归方法轻松达成这一目的: ```java public class Permutation { public static void swap(int[] arr, int i, int j) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } public static void permute(int[] arr, int start, int end) { if (start == end - 1) { for (int num : arr) { System.out.print(num + " "); } System.out.println(); } else { for (int i = start; i < end; i++) { swap(arr, start, i); permute(arr, start + 1, end); swap(arr, start, i); // backtrack } } } public static void main(String[] args) { int[] nums = {1, 2, 3}; permute(nums, 0, nums.length); } } ``` 这段Java程序定义了一个`permute()`函数,该函数接受输入数组及其起始与终止索引作为参数,并通过不断互换不同位置上的数值从而穷尽所有可能性[^2]。 #### PHP 中使用递归遍历多维数组 除了传统的单层线性结构外,在某些情况下还需要处理嵌套层次更深的数据形式——比如树形或者图状数据集。此时同样能够运用到递归技巧来进行深入探索: ```php function recursiveTraverse($array) { foreach ($array as $element) { if (is_array($element)) { recursiveTraverse($element); } else { echo "$element\n"; } } } $a3 = [ [[5, 55], 4, 444], 2, 7, 6, 8, ["w", "d", [3, 2, "a"], "s"] ]; recursiveTraverse($a3); ``` 这里展示了一种通用策略:当遇到复合型对象时便重新启动新一轮迭代直至触及底层基本单元为止[^4]。 以上就是几种典型的关于“递归算法 实现 数组排序”的具体案例分析说明。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值