选择、插入排序算法以及优化的C++实现和算法时间复杂度的比较用例

这篇博客介绍了C++中选择排序和插入排序的实现,包括各自的优化策略。作者详细阐述了两种排序算法的工作原理,并提供了C++代码示例。文章还对算法的时间复杂度进行了分析,指出插入排序在大数据集上的效率可能优于选择排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

C++算法学习(一)

前言

最近在进行数据结构的学习,在了解了队列、堆栈、图等基础知识之后,决定去跟随潮流,一般来说大多数的程序员采用C++这门语言来进行基本算法的实现,但是由于自己的个人学习经历是从C到Java,因此对C++了解不深,接触之后发现爱上了这门语言感觉是C与Java的完美融合。

排序算法
1. O(n^2)的排序算法
SelectionSort()选择排序

简单叙述这个算法是:假设需求是将数组中的元素从小到大进行排列,那么我们首先需要做的就是将出数组中的第二元素开始到结尾的最小值,很熟悉的套路是遍历然后是同第一个交换,这样就保证了最小的排在了第一位,然后是寻找从第三个到结尾的数据集的最小值然后是同第二个交换依次类推。

小小的总结:

选择排序其实就是通过顺序遍历的方式选择元素,通过交换实现排序,这样的过程执行一次数组长度的遍历之后就完成了排序

评价:由于是经过大量的遍历与交换过程才实现排序,算法执行时间较慢

代码:
///选择排序
template<typename T>

void selectionSort(T arr[],int n){
  for(int i=0;i<n;i++){
    //选择[i,n)ֵ最小的
    int minIndex=i;
    for(int j=i+1;j<n;j++){
        if(arr[j]<arr[minIndex]){
            minIndex=j;
         }
        swap(arr[i],arr[minIndex]);
    }
  }
}
InsertionSort()插入排序

经典的对于这个算法的描述是类比插扑克牌从而理顺手中牌的方法,我认为如果仅仅这样理解插入排序缺了几分深度和考究。首先还是以arr[n]举例。同样是假定遵守升序规律,我们从手中的arr[1]即第二张牌开始,先和前面一张牌arr[0]进行比较,小的话则进行交换,那么我们需要做的就是将数组中的第二元素开始的其他元素比如arr[i]按照顺序依次和前面的元素进行比较,遍历一直进行到找到前面的数(比入如arr[j])比arr[i]还要小,此时该元素的排序遍历过程立即结束,开始进行该元素arr[i]同arr[j]交换,当所有的元素完成这样的交换遍历过程后则完成插入排序。

小小的总结:

插入排序在于在将无顺序集合的第一个元素通过比较插入有序集合从而实现排序。

评价:由于在算法实现时候遍历的终止条件多,可能先停下遍历查找的几率大,所以相对于选择排序在大数据集合的排序过程表现会相对优异

代码实现
    //插入排序C++函数编写
    template<typename T>
    void insertionSort(T arr[], int n){
      for(int i=0;i<n;i++){
        for(int j=i;j>0;j--){
            if(arr[j]<arr[j-1]){
              swap(arr[i],arr[i-1]);
            }
            else break;
        }    
      }
    }  
关于插入排序算法的优化

由于

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值