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+ 次浏览

开启你的职业生涯

完成课程获得认证

开始学习
广告