交换类排序的基本思想:通过一系列交换逆序元素进行排序的方法。
冒泡排序
冒泡排序的基本思想:顾名思义就是像冒泡一样,两两比较,将大值(小值)后移,最后最大值或最小值排到最后。
优化:数据是有序的,在遍历一次时没有交换数据,所以数据是有限的,可以设置一个标记为flag
//冒泡排序优化,定义一个标志器,
void BubbleSort_P(int arr[], size_t size)
{
bool flag = true;
for (size_t i = 0; i < size; ++i) //控制排序次数
{
for (size_t j = 0; j < size - i - 1; ++j) //两两比较,注意数组越界
{
if (arr[j] > arr[j + 1])
{
std::swap(arr[j], arr[j + 1]);
flag = false;
}
}
if (flag)
break;
}
}
时间复杂度:
最好的情况是,数据有序,遍历一遍 O(N)
最差的情形是,O(N^2)
冒泡排序是稳定的排序。