C++程式遞迴插入排序


插入排序是一種用於透過像撲克牌一樣插入元素來排序資料的排序演算法。所有元素都從左到右排列,然後將第一個元素視為已排序,將其餘元素插入到左側的已排序列表中。將每個元素與其左側列表中的每個元素進行比較,直到將其插入到正確的位置。

插入排序演算法

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

  • int i, j ;

  • 從索引j=i+1遍歷到j<陣列大小

  • 對於每個元素arr[j],將其與列表arr[0到i]中的元素進行比較,直到找到元素arr[i]<arr[j]且arr[i+1]>=arr[j]。

  • 將arr[j]放置在列表中,並將所有較大的元素向右移動一個位置。

  • 結束

遞迴插入排序

  • 如果陣列長度為1,則返回。

  • 遞迴排序索引0到陣列大小-1的元素

  • 將最後一個元素插入到已排序的陣列中

示例

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

輸出 − 已排序陣列:1 2 3 4 5 7

解釋 

5 7 2 3 1 4 → 5 already sorted
5 7 2 3 1 4 → 7 at correct place
2 5 7 3 1 4 → 2 compared with 5,7 and inserted
2 3 5 7 1 4 → 3 compared with 5,7 and inserted
1 2 3 5 7 4 → 1 compared with 2,3,5,7 and inserted
1 2 3 4 5 7 → 4 compared with 5,7 and inserted

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

輸出 − 已排序陣列:1 2 2 3 3

解釋

1, 2, 3, 3, 2 → 1 already sorted
1, 2, 3, 3, 2 → 2 at correct place
1, 2, 3, 3, 2 → 3 at correct place
1, 2, 3, 3, 2 → 3 at correct place
1, 2, 2, 3, 3 → 2 compared with 3,3 and inserted

下面程式中使用的演算法如下

在氣泡排序的遞迴方法中,基例是陣列長度 = 1。否則,使用單個for迴圈遍歷陣列並相應地交換元素。

  • 獲取輸入陣列Arr[]和長度作為其中的元素數量。

  • 函式recurrbublSort(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,因為前面的迴圈將最大的元素放在了最後一個位置。

  • 對recurrbublSort(arr,len)進行遞迴呼叫。

  • 在所有呼叫結束時,當len變為1時,我們將退出遞迴,並且陣列將被排序。

  • 在main函式內部列印排序後的陣列。

示例

#include <bits/stdc++.h>
using namespace std;
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);

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

   return 0;
}

輸出

如果我們執行上述程式碼,它將生成以下輸出

Sorted array : 20 21 31 34 43 66 78

更新於:2021年11月2日

1K+ 次瀏覽

開啟你的職業生涯

完成課程獲得認證

開始學習
廣告
© . All rights reserved.