冒泡排序:基本思想就是数据的每一趟比较就会将最大(最小)的数据放到末尾,从而达到升序(降序)的序列。又称石沉大海法。
算法实现步骤:
- 从起始位置比较和下一个位置的大小
- 做交换,将大数(小数)置后
- 依次比较置换后的数和下一个数进行比较,置换
- 第一趟会将最大(最小)的数沉底,做n趟循环后,数据就会排好
实例:如图
绿色:正在比较的数据
黄色:已经排好的数据
代码:
void BubbleSort(int *arr, int left, int right)
{
int n = right - left;
for (int i = left; i < n - 1; ++i)//n-1趟排序
{
for (int j = left; j < n - i - 1; ++j)//每一趟数据进行比较的数据
{
if (arr[j] > arr[j + 1])//如果前者比后者大,做交换
{
Swap(&arr[j], &arr[j + 1]);
}
}
}
}
冒泡排序是一种很基础的排序,实现不难。
特性总结:
- 时间复杂度:O(N^2)
- 空间复杂度:O(1)
- 稳定性:稳定