1 //冒泡排序的时间复杂度为O(n平方),严格的n方,与数据状态无关 2 #include<iostream> 3 using namespace std; 4 void Bubblesort(int a[],int n){ 5 int temp; 6 for(int i=0;i<n-1;i++)//n-1趟 7 for(int j=0;j<n-i-1;j++)//每一趟比较n-i-1对数 8 if(a[j]>a[j+1]){ 9 temp=a[j]; 10 a[j]=a[j+1]; 11 a[j+1]=temp; 12 } 13 } 14 int main() 15 { 16 int arr[10]; 17 for(int i=0;i<10;i++) 18 cin>>arr[i]; 19 Bubblesort(arr,10); 20 for(int i=0;i<10;i++) 21 cout<<arr[i]<<endl; 22 return 0; 23 }
冒泡排序的改进
如果第i趟排序中没有做交换则说明这个序列已经有序,那么第i+1趟就没有执行的必要(下面的代码使用flag来标记在一趟中是否有逆序交换)
1 void Bubblesort(int a[],int n){ 2 for(int i=0;i<n-1;i++){ 3 bool flag=false; 4 for(int j=0;j<n-i-2;j++){ 5 if(a[j]>a[j+1]){ 6 flag=true; 7 int temp=a[j]; 8 a[j]=a[j+1]; 9 a[j+1]=temp; 10 } 11 } 12 if(flag==false) break; 13 }//n-1趟 14 }