【算法基础】-- 交换排序篇 - 冒泡排序

冒泡排序是交换排序中最简单的算法,所谓交换,是指根据序列中两个元素的关键字的比较结果来对换这两个记录在序列中的位置。

思想为:
假设待排序表长为 n ,从后往前(或从前往后)两两比较相邻元素的值,若为逆序(即 A [ i - 1 ] > A [ i ]),则交换它们,直到序列比较完。一趟冒泡的结果,是将当前最小元素移动到最终位置,这样,最多进行 n - 1 趟排序,所有记录都会被排好,最终达到升序状态。

算法存储结构适用性:适用于顺序存储结构链式存储结构,对于单链表,只能从前向后进行比较。

算法实现

/*
    冒泡排序:
        时间复杂度->最好情况:O(n)、平均情况:O(n^2)、最坏情况:O(n^2)
        空间复杂度->O(1)
        是否稳定->是
*/
#include<bits/stdc++.h>
#define MAX_SIZE 5
using namespace std;
typedef struct{
    int key;
}ElemType;
void BubbleSort(ElemType A[],int n){//结果为升序序列,且为向A[0]方向冒泡
    bool flag;
    int i,j;
    for(i=0;i<n-1;i++){//进行n-1趟排序,第i趟排序表示:A[i]及以后的元素为无序
        flag=false;
        for(j=n-1;j>i;j--){//对于每次的排序都从序列末尾开始,对于连续相同的部分子序列,从左面第一个开始交换
            if(A[j-1].key>A[j].key){//此处的小于号,决定了,冒泡排序是一个稳定的排序
                swap(A[j-1],A[j]);
                flag=true;//如果一趟比较中没出现交换,则flag=false
            }
        }
        if(flag==false){//如果flag=false,说明待排序表已经有序,则提前结束n-1次排序,即这时,排序趟数不到n-1次
            return;
        }
    }
}
int main(){
    ElemType A[MAX_SIZE]={{5},{4},{3},{2},{1}};
    BubbleSort(A,MAX_SIZE);
    for(int j=0;j<MAX_SIZE;j++){
        cout<<A[j].key;
    }
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值