排序算法C++&&Python实现---冒泡排序

本文将介绍基本的冒泡排序算法及两种冒泡排序的优化算法。

一、基本冒泡排序算法

  1. 原理:对于待排序数列,从后到前依次比较相邻两个元素,若后面的元素小于前面的元素,则交换。(从小到大排序)

  2. C++实现

//打印排序结果函数
void Print(int a[],int n,int i=0)
{
    //cout<<i<<endl;
    cout<<"排序后的结果为:"<<endl;
    for(int i=0;i<n;i++)
        cout<<a[i]<<" ";
    cout<<endl;
}
//冒泡排序
void bubbleSort(int a[],int n)
{
    int temp;
    for(int j=1;j<n;j++)
    {
        for(int j=1;j<n;j++)
        {
            if(a[j]<a[j-1])
            {
                temp=a[j];a[j]=a[j-1];a[j-1]=temp;
            }
        }
    }
    Print(a,n);
}
  1. Python实现
'''输出排序结果函数'''
def Print(ddata):
    n=len(ddata)
    for i in range(n):
        print ddata[i],    #其中","为了不让其输出默认的换行符
'''冒泡排序'''
def bubbleSort(data,n):
    for i in range(n)[::-1]:
        for j in range(1,n-1):
            if data[j]<data[j-1]:
                data[j],data[j-1]=data[j-1],data[j]
    Print(data)        

二、冒泡排序改进算法1

  1. 原理
    设置是否交换标志,若循环完某一趟没有交换任何数据,则证明已排序完成。
  2. C++实现
//冒泡排序改进方法1---设置变化标志,若循环完某一趟没改变任何数据,则证明排序完成
void bubbleSortOpt1(int a[],int n)
{
    for(int j=0;j<n;j++)
    {
        int change=0;
        for(int i=1;i<n;i++)
        {
            if(a[i]<a[i-1])
            {

                int temp=a[i];a[i]=a[i-1];a[i-1]=temp;
                change++;
            }
        }
        cout<<change<<endl;
        if(change==0)
            break;
    }
    Print(a,n);
}

3.Python实现

'''冒泡排序优化方法1---加入变化标志'''
def bubbleSortOpt1(data,n):
    for i in range(n)[::-1]:
        change=0
        for j in range(1,n):
            if data[j]<data[j-1]:
                change+=1
                data[j],data[j-1]=data[j-1],data[j]
        if change==0:
            break
    Print(data)

三、 冒泡排序改进算法2

  1. 原理
    记录每趟循环交换后的位置,下次排序时,只排到此位置即可,因为后面的数据都以排好。

  2. C++实现

//冒泡排序优化方法2---记录每趟排序完成后的位置,下次排序到此位置便结束
void bubbleSortOpt2(int a[],int n)
{   
    int i=n;
    while(i>0)
    {
        int position=0;
        for(int j=1;j<i;j++)
        {
            if(a[j]<a[j-1])
            {
                position=j;
                int temp=a[j];a[j]=a[j-1];a[j-1]=temp;
            }
        }
        i=position;
    }
    Print(a,n);
}
  1. Python实现
'''冒泡排序优化方法2---记录变化位置'''
def bubbleSortOpt2(data,n):
    for i in range(n)[::-1]:
        position=0
        for j in range(1,i):
            if data[j]<data[j-1]:
                position=j
                data[j],data[j-1]=data[j-1],data[j]
        i=position
    Print(data)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值