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