zoukankan      html  css  js  c++  java
  • 冒泡排序(及改进版)

     冒泡排序

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

  • 相关阅读:
    Mysql 重做日志及与二进制日志的区别
    【MySql】性能优化之分析命令
    ubuntu一些基本软件安装方法
    Linux学习笔记
    exp/imp三种模式——完全、用户、表
    Oracle学习日志20150302
    如何在macOS Sierra中运行CORE Keygen破解程序
    国内各大互联网公司技术站点集合
    React Native资料
    React Native集成到现有项目(非cocoa pods)
  • 原文地址:https://www.cnblogs.com/zkfopen/p/11190483.html
Copyright © 2011-2022 走看看