冒泡排序(及改进版)

 冒泡排序

(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;
}

 

 

posted on 2019-07-15 18:05  zkfopen  阅读(1509)  评论(0编辑  收藏  举报

导航