常见排序算法总结和比较

本文详细介绍了冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序和计数排序这八种常见的排序算法,包括算法说明、复杂度分析和实现方法。各种排序算法在不同场景下有不同的效率表现,理解这些算法有助于优化数据处理过程。
摘要由CSDN通过智能技术生成
排序算法比较
排序算法 平均时间复杂度 最好情况 最坏情况 空间复杂度 稳定性
冒泡排序 O(n2) O(n) O(n2) O(1) 稳定
选择排序 O(n2) O(n2) O(n2) O(1) 不稳定
插入排序 O(n2) O(n) O(n2) O(1) 稳定
希尔排序 O(n1.3) O(n2) O(1) 不稳定
归并排序 O(nlogn) O(nlogn) O(nlogn) O(n) 稳定
快速排序 O(nlogn) O(nlogn) O(n2) O(logn) 不稳定
堆排序 O(nlogn) O(nlogn) O(nlogn) O(1) 不稳定
计数排序 O(n+k) O(n+k) O(n+k) O(k) 稳定
1. 冒泡排序(Bubble Sort)
1.1 算法说明

冒泡排序又名大数沉底法。重复遍历要排序的数组,一次比较两个元素,如果顺序错误就进行交换。重复遍历直到没有元素要进行交换,表示排序已经完成。冒泡排序从小到大的排序过程中,每一趟冒泡完成后,总是一个最大值沉到最后(下)面。

1.2 算法复杂度

最佳情况:T(n) = O(n) 最差情况:T(n) = O(n2) 平均情况:T(n) = O(n2)

1.3 算法实现
//从小到大排序
void BubbleSort(int a[] , int n){
    for(int i = 0;i < n - 1;i++){
        for(int j = 0;j < n - 1 - i;j++){
            if(a[j] > a[j + 1]){
                int temp = a[j];
                a[j] = a[j + 1];
                a[j + 1] = temp;
            }
        }
    }
}
//从大到小排序
void BubbleSort1(int a[] , int n){
    for(int i = 0;i < n - 1;i++){
        for(int j = i;j < n - 1;j++){
            if(a[j] < a[j + 1]){
                int temp = a[j];
                a[j] = a[j +
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值