目录
冒泡排序算法
递归冒泡排序
示例
下面程序中使用的方法如下
输出
首页 后端开发 C++ 递归冒泡排序的C程序

递归冒泡排序的C程序

Sep 15, 2023 pm 08:49 PM
递归 冒泡排序 c程序。

递归冒泡排序的C程序

冒泡排序是最简单的排序算法之一,用于通过比较相邻元素对数据进行排序。所有元素都分阶段进行比较。第一阶段将最大值放在最后,第二阶段将第二大元素放在倒数第二个位置,依此类推,直到完整列表排序完毕。

冒泡排序算法

  • int arr[5]= { 5,4,2,1,3 };

  • int i, j ;

  • 从索引 i=0 遍历到 i

    • 从索引 j=0 遍历到数组size - i - 1

    • 如果 arr[i]>arr[j] 将 arr[i] 与 arr[j] 交换

  • 结束

递归冒泡排序

  • 如果数组length 为 1 则返回

  • 遍历数组一次,固定最大元素在末尾​​p>

  • 其余部分递归执行步骤 2除最后一个元素之外的数组

示例

输入 − Arr[] = { 5,7,2,3, 1,4}; length=6

输出 − 排序数组:1 2 3 4 5 7

说明 

First Pass
5 7 2 3 1 4 → swap → 5 2 7 3 1 4
5 2 7 3 1 4 → swap → 5 2 3 7 1 4
5 2 3 7 1 4 → swap → 5 2 3 1 7 4
5 2 3 1 7 4 → swap → 5 2 3 1 4 7
Second Pass
5 2 3 1 4 7 → swap → 2 5 3 1 4 7
2 5 3 1 4 7 → swap → 2 3 5 1 4 7
2 3 5 1 4 7 → swap → 2 3 1 5 4 7
2 3 1 5 4 7 → swap → 2 3 1 4 5 7
Third Pass
2 3 1 4 5 7 → swap → 2 1 3 4 5 7
2 1 3 4 5 7 no swap
Fourth Pass
2 1 3 4 5 7 → swap → 1 2 3 4 5 7
1 2 3 4 5 7 no swap in further iterations
登录后复制

输入− Arr[] = { 1, 2, 3, 3, 2 };

输出− 排序数组:1 2 2 3 3

说明 -

First Pass
1 2 3 3 2 → swap → 1 2 3 2 3
1 2 3 2 3 → swap → 1 2 2 3 3
1 2 2 3 3 no swap in further iterations
Second Pass
1 2 2 3 3 no swap in further iterations
登录后复制

下面程序中使用的方法如下

在冒泡排序的递归方法中,基本情况是数组长度= 1。否则使用单个for循环遍历数组并相应地交换元素。< /p>

  • 将输入数组 Arr[] 和长度作为其中元素的数量。

  • 函数 recurbublSort(int arr[], int len) 获取数组及其长度,并使用冒泡排序对数组进行递归排序。

  • 获取变量 temp。

  • < li>

    如果数组长度为 1,则返回 void。

  • 否则使用单个 for 循环遍历数组,并针对每个元素 arr[i]>arr[i+1 ],交换这些元素。

  • 设置 temp=arr[i]、arr[i]=arr[i+1] 和 arr[i+1]=temp。< /p>

  • 现在将长度减 1,因为上一个循环将最大元素放置在最后一个位置。

  • 递归调用recurbublSort(arr,len)。

  • 在所有调用结束时,当 len 变为 1 时,我们将退出递归并对数组进行排序。

    < /li>
  • 在 main 中打印排序后的数组。

示例

#include <stdio.h>
void recurbublSort(int arr[], int len){
   int temp;

   if (len == 1){
      return;
   }
   for (int i=0; i<len-1; i++){
      if (arr[i] > arr[i+1]){
         temp=arr[i];
         arr[i]=arr[i+1];
         arr[i+1]=temp;
      }
   }
   len=len-1;
   recurbublSort(arr, len);
}
int main(){
   int Arr[] = {21, 34, 20, 31, 78, 43, 66};
   int length = sizeof(Arr)/sizeof(Arr[0]);

   recurbublSort(Arr, length);

   printf("Sorted array : ");
   for(int i=0;i<length;i++){
      printf("%d ",Arr[i]);
   }

   return 0;
}
登录后复制

输出

如果我们运行上面的代码,它将生成以下输出

Sorted array: 20 21 31 34 43 66 78
登录后复制

以上是递归冒泡排序的C程序的详细内容。更多信息请关注PHP中文网其他相关文章!

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

C++ 函数的递归实现:递归深度有限制吗? C++ 函数的递归实现:递归深度有限制吗? Apr 23, 2024 am 09:30 AM

C++函数的递归深度受到限制,超过该限制会导致栈溢出错误。限制值因系统和编译器而异,通常在1000到10000之间。解决方法包括:1.尾递归优化;2.尾调用;3.迭代实现。

C++ lambda 表达式是否支持递归? C++ lambda 表达式是否支持递归? Apr 17, 2024 pm 09:06 PM

是的,C++Lambda表达式可以通过使用std::function支持递归:使用std::function捕获Lambda表达式的引用。通过捕获的引用,Lambda表达式可以递归调用自身。

C++ 函数的递归实现:递归与非递归算法的比较分析? C++ 函数的递归实现:递归与非递归算法的比较分析? Apr 22, 2024 pm 03:18 PM

递归算法通过函数自调用解决结构化的问题,优点是简洁易懂,缺点是效率较低且可能发生堆栈溢出;非递归算法通过显式管理堆栈数据结构避免递归,优点是效率更高且避免堆栈溢出,缺点是代码可能更复杂。选择递归或非递归取决于问题和实现的具体限制。

C++ 函数递归详解:递归在字符串处理中的应用 C++ 函数递归详解:递归在字符串处理中的应用 Apr 30, 2024 am 10:30 AM

递归函数是一种在字符串处理中反复调用自身来解决问题的技术。它需要一个终止条件以防止无限递归。递归在字符串反转和回文检查等操作中被广泛使用。

Java数据结构与算法:深入详解 Java数据结构与算法:深入详解 May 08, 2024 pm 10:12 PM

数据结构和算法是Java开发的基础,本文深入探讨Java中的关键数据结构(如数组、链表、树等)和算法(如排序、搜索、图算法等)。这些结构通过实战案例进行说明,包括使用数组存储分数、使用链表管理购物清单、使用栈实现递归、使用队列同步线程以及使用树和哈希表进行快速搜索和身份验证等。理解这些概念可以编写高效且可维护的Java代码。

C++ 递归进阶:理解尾递归优化及其应用 C++ 递归进阶:理解尾递归优化及其应用 Apr 30, 2024 am 10:45 AM

尾递归优化(TRO)可提高特定递归调用的效率。它将尾递归调用转换为跳转指令,并将上下文状态保存在寄存器中,而不是堆栈上,从而消除对堆栈的额外调用和返回操作,提高算法效率。利用TRO,我们可以针对尾递归函数(例如阶乘计算)进行优化,通过将tail递归调用替换为goto语句,编译器会将goto跳转移化为TRO,优化递归算法的执行。

用 C++ 函数指针改造代码:提升效率和可复用性 用 C++ 函数指针改造代码:提升效率和可复用性 Apr 29, 2024 pm 06:45 PM

函数指针技术可提升代码效率和可复用性,具体表现为:提升效率:使用函数指针可减少重复代码,优化调用过程。提高可复用性:函数指针允许使用通用函数处理不同数据,提高程序的可复用性。

面向初学者的 C++ 递归指南:打造基础和培养直觉 面向初学者的 C++ 递归指南:打造基础和培养直觉 May 01, 2024 pm 05:36 PM

递归是一种强大的技术,它允许函数调用自身来解决问题,在C++中,递归函数由两个关键要素构成:基本情况(确定递归何时停止)和递归调用(将问题分解为更小子问题)。通过理解基础知识并练习实战示例(如阶乘计算、斐波那契数列和二叉树遍历),您可以建立递归直觉,并自信地在代码中使用它。

See all articles