C语言递归冒泡排序程序


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

冒泡排序算法

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

  • int i, j ;

  • 从索引i=0遍历到i<数组大小

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

    • 如果arr[i]>arr[j],则交换arr[i]和arr[j]

  • 结束

递归冒泡排序

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

  • 遍历数组一次并将最大元素固定在末尾

  • 对除最后一个元素之外的其余数组递归执行步骤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循环遍历数组并相应地交换元素。

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

  • 函数recurbublSort(int arr[], int len)接收数组及其长度,并使用冒泡排序递归排序数组。

  • 取一个变量temp。

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

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

  • 设置temp=arr[i],arr[i]=arr[i+1],arr[i+1]=temp。

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

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

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

  • 在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

更新于: 2021年11月2日

8K+ 次浏览

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告