算法和数据结构 冒泡排序

1、时间复杂度:O(N^N)。

2、算法实现

2.1)每趟需要把无序区间的最大的数放到尾部,所以最多需要N-1趟;

2.2)第i趟的无序区间是[0, N-1-i]。

2.3)无序区间的相邻元素两两比较,满足条件则交换。

void bubble_sort(std::vector<int> &arr)
{
    for (int i = 0; i < arr.size() - 1; i++) // N-1趟
    {
        for (int j = 0; j < arr.size() - 1 - i; j++) // 第i趟的无序区间[0, N-1-i]
        {
            if (arr[j] > arr[j+1]) // 相邻元素两两比较,满足条件则交换
            {
//                int tmp = arr[j];
//                arr[j] = arr[j+1];
//                arr[j+1] = tmp;
                arr[j] = arr[j] ^ arr[j+1];
                arr[j+1] = arr[j] ^ arr[j+1];
                arr[j] = arr[j] ^ arr[j+1];
            }
        }
    }
}

3)冒泡排序稳定,因为排序前后,相等元素的相对位置没有发生改变,具体看实现的判断条件(如果非要变也没问题)。  

 

posted @ 2020-03-19 14:37  happyyoung  阅读(174)  评论(0编辑  收藏  举报