冒泡排序(及改进版)
冒泡排序
(1)基本思想
冒泡排序的基本思想就是:从无序序列头部开始,进行两两比较,根据大小交换位置,直到最后将最大(小)的数据元素交换到了无序队列的队尾,从而成为有序序列的一部分;下一次继续这个过程,直到所有数据元素都排好序。
算法的核心在于每次通过两两比较交换位置,选出剩余无序序列里最大(小)的数据元素放到队尾。
(2)C++代码:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
// 第一种冒泡排序算法
void bubbleSort(int nums[], int length)
{
for (int i = 0; i < length; i++)
{
for (int j = 0; j < length - i - 1; j++)
{
if (nums[j] > nums[j + 1])
swap(nums[j], nums[j + 1]);
}
}
}
// 对冒泡排序第一次改进:flag用于标志某一趟排序过程中是否有数据交换
// 如果进行某一趟排序时没有数据交换,则说明数据已经按要求排序好
// 可立即结束排序,避免不必要的比较过程
void bubbleSort2(int nums[], int length)
{
for (int i = 0; i < length; i++)
{
bool flag = false;
for (int j = 0; j < length - i - 1; j++)
{
if (nums[j] > nums[j + 1])
{
swap(nums[j], nums[j + 1]);
flag = true;
}
}
if (!flag)
break;
}
}
int main()
{
const int len = 11;
int nums[len] = { 9, 6, 10, 8, 7, 4, 2, 5, 3, 1, 0 };
//bubbleSort(nums, len);
bubbleSort2(nums, len);
for (int val : nums)
cout << val << " ";
cout << endl;
return 0;
}