数据结构与算法之排序算法---冒泡排序

数据结构与算法之排序算法—冒泡排序

  • 冒泡排序的基本思想
  • 完整实现代码
  • 复杂度分析

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张图片

时间复杂度分析

(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);

你可能感兴趣的:(数据结构与算法)