算法和数据结构 冒泡排序
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)冒泡排序稳定,因为排序前后,相等元素的相对位置没有发生改变,具体看实现的判断条件(如果非要变也没问题)。