2016年10月18日15:34:24 by:piaxiaohui
冒泡排序:是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序则交换,直到没有反序的记录为止。
冒泡排序的由来,就有些类似于水中的Bubble,比较轻的Bubble始终在水的底层,而较轻的Bubble在水的上层;较轻的Bubble会向水的上层移动,也就类似于Bubble Weight在比较的过程中,较轻的Bubble会向上冒。
代码块语法遵循标准markdown代码,例如:
@requires_authorization
#include
using namespace std;
//功能函数:实现数组元素的交换功能
void swap( int a[], int i , int j){
int temp = a[i];
a[i] = a[j];
a[j] = temp;
}
//功能函数:实现数组的打印功能
void printArray( int a[],int length){
for( int i = 0; i < length; i++){
cout << a[i] << " ";
}
cout << endl;
}
//核心函数:实现冒泡排序,这里利用一个标志flag来减少比较次数
//比如:比较有序的序列 2,1,3,4,5,6,7,8,9,10
//在采取了标志位后:
// i= 0,比较9次
// i= 1,比较8次
// i= 2,比较0次,此时没有任何数据交换,说明已经有序
void BubbleSort( int a[],int length){
int flag = 1;
for( int i = 0; i < length-1&&flag; i++){
flag = 0;
cout << "第"<"趟排序后的序列为:"<for( int j = length-2; j >= i; j--){
if( a[j] > a[j+1]){
swap( a,j,j+1);
flag = 1;
}
}
printArray(a,length);
}
}
int main(){
int a[10]={1,3,5,7,9,0,2,4,6,8};
int length = 10;
cout<<"数组排序前为:"<cout <<"数组排序后为:"<return 0;
}
(1) 最好的情况,也就是要排序的数组有序,没有数据交换
a[10]={1,2,3,4,5,6,7,8,9,10};
需要比较的次数为:n-1次 也就是i = 0时,需要比较9次
(2) 最坏的情况,也就是要排序的数组逆序,每一次比较都要逆序
a[10]={10,9,8,7,6,5,4,3,2,1};
i = 0 时,要比较的次数为9次
i = 1 时, 要比较的次数为8次
……
(n-1)+(n-2)+(n-3)+…+3+2+1 = n(n-1)/2;
因此时间复杂度为:O(n2);