各种排序总结(四)冒泡排序

思想:

一共n-2次外循环,每次循环将最大的数放到未排序的数列的最后。

#include <iostream>

using namespace std;
void BubbleSort(int* arr, int n)
{
    bool Swap;
    int i,j;
    for(i=0; i<n-1; i++)
    {
        Swap = false;
        for(j=0; j<n-i-1; j++)
        {
            if(arr[j] > arr[j+1])  //较大的放到后面
            {
                int temp = arr[j];
                arr[j] = arr[j+1];
                arr[j+1] = temp;
                Swap = true;
            }
        }
        if(!Swap)  //没有发生交换
         return;
    }
}
int main()
{
    int * arr;
    int n;
    cout<<"Input the arr length:"<<endl;
    cin>>n;
    arr = new int[n];
    cout<<"Input the arr elements:"<<endl;
    for(int i=0;i<n;i++)
    {
        cin>>arr[i];
    }
    BubbleSort(arr,n);
    cout<<"The outcome:"<<endl;
    for(int i=0;i<n;i++)
        cout<<arr[i]<<endl;
    return 0;
}
/******************
稳定
最佳时间代价:输入数组为正序时,只运行第一轮循环进行n-2次比较后就发现没有交换,
               结束排序,因此最小时间代价O(n)。
最差时间代价:外层n-2次,内层n-i次,O(n^2)。
平均时间代价:O(n^2)。
空间复杂度:只用一个临时变量,O(1)。
总结:
1.由于平均时间为O(n^2),适用于n较小的情况。
2.由于输入数组正序时O(n),因此适用于输入基本有序的情况。
*******************/

 

 

posted on 2013-09-11 15:39  CnZyy  阅读(187)  评论(0编辑  收藏  举报

导航