排序算法——冒泡排序

来源:互联网 发布:mac的音频剪辑软件 编辑:程序博客网 时间:2024/04/28 03:17

冒泡排序是一种交换排序方法,每次排序之后都会使最大值“沉底”,小值上升,因此成为冒泡排序。时间复杂度  :  O(n^2),空间复杂度 : O(1)。

直接看代码:

#include<iostream>using namespace std;void printarr(int arr[],int n);void bubbleSort(int arr[],int n){int i,temp;for(i=0;i<n;i++){for(int j=1;j<n-i;j++){if(arr[j-1]>arr[j]){//swap(arr[j-1],arr[j]);temp=arr[j-1];arr[j-1]=arr[j];arr[j]=temp;}}cout<<"第"<<i<<"次排序结果"<<endl;printarr(arr,n);cout<<endl;}}void printarr(int arr[],int n){for(int m=0;m<n;m++){cout<<arr[m]<<" ";}}void main(){int array[]={3,8,5,9,7,6,2,1,10,4};bubbleSort(array,10);}
上述代码运行结果是:

以上代码比较了10次,即使在第7次时我们已经排序完成,后面的比较依然进行;

如果用一个标志位flag来表示该次排序是否进行交换,我们可以预先知道排序是否完成,可提高排序算法效率;把bubbleSort函数改成以下形式:

void bubbleSort(int arr[],int n){int j,flag=1;int x,k=n-1;while((k>0)&&(flag==1)){flag=0;//for(j=0;j<k;j++)//if(arr[j]>arr[j+1])//{//flag=1;//x=arr[j];//arr[j]=arr[j+1];//arr[j+1]=x;//}for(j=1;j<=k;j++)if(arr[j-1]>arr[j]){flag=1;x=arr[j];arr[j]=arr[j-1];arr[j-1]=x;}cout<<"第"<<n-k<<"次排序结果"<<endl;printarr(arr,n);cout<<endl;k--;}}


由运行结果可知,通过加入标志位,可以在排序完成时提前结束排序算法,减少了比较次数。

0 0
原创粉丝点击