本文将介绍基本的冒泡排序算法及两种冒泡排序的优化算法。
一、基本冒泡排序算法
原理:对于待排序数列,从后到前依次比较相邻两个元素,若后面的元素小于前面的元素,则交换。(从小到大排序)
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)