各大排序算法C++代码实现

本文介绍了各种排序算法,包括冒泡、选择、插入、归并、快速、堆和希尔排序,并提供了C++代码实现。重点阐述了时间复杂度和稳定性,其中归并排序在特殊情况下可降低空间复杂度但可能增加时间复杂度。文章还提供了排序算法的动画链接以帮助理解。
摘要由CSDN通过智能技术生成

 排序算法分类

 排序算法比较表格

 注:

1 归并排序可以通过手摇算法将空间复杂度降到O(1),但是时间复杂度会提高。
2 基数排序时间复杂度为O(N*M),其中N为数据个数,M为数据位数。

辅助记忆

---- 时间复杂度记忆- 

  • 冒泡、选择、直接 排序需要两个for循环,每次只关注一个元素,平均时间复杂度为O(n^{2})O(n^{2})(一遍找元素O(n)O(n),一遍找位置O(n)O(n))
  • 快速、归并、希尔、堆基于二分思想,log以2为底,平均时间复杂度为O(nlogn)O(nlogn)(一遍找元素O(n)O(n),一遍找位置O(logn)O(logn))

---- 稳定性记忆-“快希选堆”(快牺牲稳定性) 

关于所有排序的动画请参考:https://visualgo.net/en/sorting

【代码实现】

1 冒泡排序

//array[]为待排序数组,n为数组长度
void BubbleSort(int array[], int n)
{
    int i, j, k;
    for(i=0; i<n-1; i++)
        for(j=0; j<n-1-i; j++)
        {
            if(array[j]>array[j+1])
            {
                k=array[j];
                array[j]=array[j+1];
                array[j+1]=k;
            }
        }
}

2.选择排序

#include <iostream>
#include<string>
using namespace std;
 
voi
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值