冒泡排序的原理:
将相邻两个元素进行对比,若第一个元素大于第二个元素,则交换两个元素位置,依次从左到右进行,直到最后一个元素
循环进行这个过程,直到没有元素需要对比。
实例:
数列: 3 7 2 8 34 12 25 6
第一次循环:3 2 7 8 12 25 6 34
第二次循环:2 3 7 8 12 6 25 34
第三次循环:2 3 7 8 6 12 25 34
通过例子可以发现,每次过程会令最大的数放到最后的位置。此为冒泡排序
时间复杂度:
最好的结果:数列已经排列好,进行一次循环就会发现这是一个已经排列好的数列,时间复杂度为:O(n)
最坏的结果:数列为反向排列好的:时间复杂度为: T(n)= (n-1)+(n-2)+(n-3)+ ... + 1 =n * (n-1)/2 = O(n^2)
代码实现:
#include <iostream>
using namespace std;
void bubblesort(int a[], int n){
for(int i=0; i < n-1; i++){
for(int j = i+1; j < n; j++){
if(a[i] > a[j]){
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
}
int main(){
int n;
cout<<"Please insert the number of elements: "<<endl;
cin>> n;
int a[n];
cout<<"Please insert the elements:"<<endl;
for(int index=0; index<n; index++){
cin>>a[index];
}
bubblesort(a, n);
for (int j=0; j<n; j++){
cout<<" "<<a[j]<<endl;
}
return 0;
}
输出结果: