基本排序之冒泡排序

冒泡排序:

概述:

1.从首元素开始,依次比较相邻的两个数。

2.如果前一个数大于后一个数,就进行交换,这样就把比较大的数放在了右边的位置上。

3.依次比较,直到最大的数在数组的尾部(即倒数第二个数和倒数第一个数比较完)。

4.重复上述步骤,此时数组尾部为倒数第二个元素。以此类推。

稳定性:

冒泡是个稳定算法。

时间复杂度:

平均时间复杂度为:O(N²)。

因为冒泡排序你始终都要从第一个元素遍历到最后一个元素,进行相邻元素的比较,第一个元素比较N次到达末尾,第二个比较N-1次...

所以总共是N+(N-1)+(N-2)+...+1=(1+N)*N/2,最高项为N²,所以时间复杂度为O(N²).

代码:

 

#include <iostream>
using namespace std;
//用模板整型和浮点型都可以使用
template<typename T>
void BubbleSort(T array[],int len)
{
    if (len < 2)
    {
        return;
    }
    int i, j;
    //j从数组末尾开始,i一直遍历到j,相邻比较,如果当前大于后一个元素就交换
    //遍历一遍后j--,说明最大数已经到了数组末尾,下一次选出次大数放在倒数第二个位置,所以j--
    for (j = len - 1; j >= 0; j--)
        for (i = 0; i < j; i++)
        {
            if (array[i] > array[i + 1])
            {
                int temp = array[i];
                array[i] = array[i + 1];
                array[i + 1] = temp;
            }
        }
}
int main()
{
    int arr[10] = { 2, 4, 1, 1, 3, 7, -9, 7, 8, 8 };
    BubbleSort(arr, 10);
    for (int i = 0; i < 10; i++)
    {
        cout << arr[i] << " ";
    }
    return 0;
}

 

posted @ 2018-01-24 16:33  _NewMan  阅读(146)  评论(0编辑  收藏  举报