您的位置:首页 > 编程语言 > C语言/C++

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

2017-05-30 11:16 441 查看
本文将介绍基本的冒泡排序算法及两种冒泡排序的优化算法。


一、基本冒泡排序算法

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

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);
}


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

原理

设置是否交换标志,若循环完某一趟没有交换任何数据,则证明已排序完成。

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

原理

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

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);
}


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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息