C++实现改进的冒泡排序

时间:2022-12-29 20:28:20

  冒泡排序法(Bubble Sort),即起泡排序并不能改观普通排序的时间复杂度,还是O(n^2)。冒泡排序法是从后往前两两比较,然后遍历整个数组,犹如鱼吐水泡,故起此名。而普通排序法是遍历整个数组,然后每个元素和后面的所有元素进行比较,升序则是后面小的和该元素互换位置,但这样可能将很小的元素移到后面。
  改进的冒泡排序是通过设立一个标志位Flag,当检测到升降序排序时完成时候,置位标志位Flag,提前结束排序。传统冒泡排序和改进的排序程序比较如下:

#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
/********************************
传统冒泡升序排序
********************************/

void BubbleSort(int *data, int nLen)
{
for(int i=0; i<nLen;i++)
{
for(int j=nLen-1;j>i;j--)
{
if(data[j-1]>data[j])
swap(data[j-1],data[j]);
}
}
}
/********************************
优化冒泡升序排序
设置标志位来提前结束早排序完成情况
********************************/

void OptimBubbleSort(int *data, int nLen )
{
bool flag = false; //设立一个标志位
for(int i=0;(i<nLen) &&(flag == false);i++)
{
flag = true;
for(int j=nLen-1;j>i;j--)
{
if(data[j-1]>data[j])
{
swap(data[j-1],data[j]);
flag = false;
}
}
}
}
int main()
{
int nArr[100],nLen=0;
char c;
//键盘输入一行数据,空格隔开
while((c=getchar())!= '\n')
{
if(c != ' ')
{
ungetc(c,stdin);
cin>>nArr[nLen++];
}
}
//BubbleSort(nArr, nLen); //普通冒泡排序
OptimBubbleSort(nArr, nLen);//改进冒泡排序
for(int j=0;j<nLen;j++)
{
cout<<nArr[j]<<' ';
}
cout<<endl;
return 0;
}

个人学习记录,由于能力和时间有限,如果有错误望读者纠正,谢谢!

转载请注明出处:CSDN 无鞋童鞋。