递归冒泡排序的 C 程序

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

冒泡排序算法

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

  • 内部 i, j ;

  • 从索引 i=0 到 i<array size 遍历

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

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

  • 结尾

递归冒泡排序

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

  • 遍历数组一次并在最后固定最大元素

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

例子

输入 - Arr[] = { 5,7,2,3,1,4 }; 长度=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) 获取数组及其长度,并使用冒泡排序对数组进行递归排序。

  • 取一个可变温度。

  • 如果数组长度为 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("排序数组: ");

   for(int i=0;i<length;i++){

      printf("%d ",Arr[i]);

   }

   return 0;

}

输出结果

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

Sorted array: 20 21 31 34 43 66 78

以上是 递归冒泡排序的 C 程序 的全部内容, 来源链接: utcz.com/z/347472.html

回到顶部