选择排序的递归算法

本文介绍了一个使用C语言实现的选择排序算法,通过递归的方式完成数组的排序过程。该程序首先定义了一个递归函数fun,用于在数组中找到最大值并将其放置在合适的位置。主函数中还展示了如何生成随机数填充数组,并调用排序函数进行排序,最后输出排序后的结果。

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

#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define N 5

void fun(int* a,int n,int i)
{
    if(i>=n-1)
    {
        return;
    }
    else{
        int temp,j;
        temp=i;
        for(j=i+1;j<n;j++)
        {
            if(a[j]>a[temp])
                temp=j;
        }
        if(temp!=i)
        {
            int m;
            m=a[temp];
            a[temp]=a[i];
            a[i]=m;
        }
        fun(a,n,i+1);
    }
}

void main()
{
    int a[N],i,j,temp;
    time_t ds;
    int data=time(&ds);
    srand(data);
    for(i=0;i<N;i++)
    {
        a[i]=rand()%50+10;
        printf("\n%d ",a[i]);
    }


printf("\n----------------------------------------------------------\n");

fun(a,N,0);


    for(i=0;i<N;i++)
    printf("\n%d",a[i]);
    system("pause");
}

### 递归实现简单选择排序算法 简单选择排序是一种基于选择排序算法,其核心思想是通过多次选择当前未排序部分中的最小(或最大)元素,并将其放置到正确的位置上。以下是使用递归方式实现简单选择排序的具体方法[^1]。 递归版本的简单选择排序通过定义一个辅助函数来找到数组中最小值的索引,并将该最小值与当前起始位置的元素交换。然后对剩余的子数组进行递归调用,直到整个数组排序完成[^2]。 以下是使用C++语言实现递归简单选择排序的代码示例: ```cpp #include <iostream> using namespace std; // 找到从start开始的最小值的索引 int findMinIndex(int arr[], int start, int n) { if (start == n - 1) return start; // 如果只剩下一个元素,则返回其索引 int minIndex = findMinIndex(arr, start + 1, n); // 递归查找剩余部分的最小值索引 return arr[start] <= arr[minIndex] ? start : minIndex; // 比较并返回真正的最小值索引 } // 递归简单选择排序函数 void selectionSortRecursive(int arr[], int start, int n) { if (start >= n - 1) return; // 基本情况:如果起始位置到达最后一个元素,则停止 int minIndex = findMinIndex(arr, start, n); // 找到从start开始的最小值的索引 if (minIndex != start) { // 如果最小值不在起始位置,则交换 swap(arr[start], arr[minIndex]); } selectionSortRecursive(arr, start + 1, n); // 对剩余部分递归排序 } // 主函数测试递归简单选择排序 int main() { int arr[] = {64, 25, 12, 22, 11}; int n = sizeof(arr) / sizeof(arr[0]); // 调用递归简单选择排序函数 selectionSortRecursive(arr, 0, n); // 输出排序后的数组 cout << "Sorted array: "; for (int i = 0; i < n; i++) { cout << arr[i] << " "; } cout << endl; return 0; } ``` #### 算法特点 1. **时间复杂度**: - 最好、最坏和平均时间复杂度均为 \(O(n^2)\),因为每次都需要遍历剩余部分以找到最小值[^3]。 2. **空间复杂度**:由于递归调用栈的存在,空间复杂度为 \(O(n)\)[^4]。 3. **稳定性**:简单选择排序不是一种稳定的排序算法,因为在交换过程中可能会改变相同值元素的相对顺序[^5]。 #### 动态过程 递归简单选择排序通过逐步缩小未排序部分的范围来构建有序序列。在每一层递归中,它都会找到当前未排序部分中的最小值,并将其移动到正确的位置。这一过程类似于不断挑选出最小的物品并依次放入已排序区域[^6]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

haibianyoushark

如有所帮助,请留下碎银,多谢!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值