递归冒泡排序的 C 程序
冒泡排序是最简单的排序算法之一,用于通过比较相邻元素对数据进行排序。所有元素都分阶段进行比较。第一个阶段将最大值放在最后,第二个阶段将第二大元素放在倒数第二个位置,依此类推,直到对完整列表进行排序。
冒泡排序算法
intarr[5]={5,4,2,1,3};
内部i,j;
从索引i=0到i<arraysize遍历
从索引j=0遍历到数组大小-i-1
如果arr[i]>arr[j]将arr[i]与arr[j]交换
结尾
递归冒泡排序
如果数组长度为1,则返回
遍历数组一次并在最后固定最大元素
除最后一个元素外,对数组的其余部分递归执行步骤2
例子
输入 -Arr[]={5,7,2,3,1,4};长度=6
输出 -排序数组:123457
说明 -
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};
输出 -排序数组:12233
说明-
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(intarr[],intlen)获取数组及其长度,并使用冒泡排序对数组进行递归排序。
取一个可变温度。
如果数组长度为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