zoukankan      html  css  js  c++  java
  • 冒泡排序

    冒泡排序

    冒泡排序动画
    img

    实现算法 (形式1)

    //省略前面代码...
    {
        int []num ={488, 848, 559, 15, 5, 11441}
                for (int i = 0; i < num.Length - 1; i++)
                {
                    for (int j = 0; j < num.Length - 1 - i; j++)
                    {
                        if (num[j] > num[j + 1])
                        {
                            int tem;
                            tem = num[j + 1];
                            num[j + 1] = num[j];
                            num[j] = tem;
                        }
                    }
                }
    }
    
    
    • 排序num数组需要num.Length-1轮,因为最后剩下的一个数(排序后num的第一个数)不用比较就是最小的,所以减去1
    • 若在比较过程中前一个数比后一个大,则交换位置,保证在一轮比较后,最大的数在所有比较数组成队列中的最后。

    变式

    //省略前面代码...
    {
        int []num ={488, 848, 559, 15, 5, 11441}
                for (int i = 0; i < num.Length - 1; i++)
                {
                    for (int j = num.Length - 1- i; j >0 ; j--)
                    {
                        if (num[j-1] > num[j])
                        {
                            int tem;
                            tem = num[j - 1];
                            num[j - 1] = num[j];
                            num[j] = tem;
                        }
                    }
                }
    }
    
    • 变式和形式1的区别1:每轮比较开始的位置不同,形式1每轮从剩下未排序数中的首个开始,而变式则是从未排序数中的末尾开始

    • 变式和形式1的区别2: num排序是从后向前(形式1),num排序是从前向后(变式),可以通过减少2轮排序验证

      • 形式1

        //省略前面代码...
        {
            int []num ={488, 848, 559, 15, 5, 11441}
                    for (int i = 0; i < num.Length - 3; i++)
                    {
                        for (int j = 0; j < num.Length - 1 - i; j++)
                        {
                            if (num[j] > num[j + 1])
                            {
                                int tem;
                                tem = num[j + 1];
                                num[j + 1] = num[j];
                                num[j] = tem;
                            }
                        }
                    }
        }
        

        Snipaste_2021-07-03_14-06-12

      • 变式

        //省略前面代码...
        {
            int []num ={488, 848, 559, 15, 5, 11441}
                    for (int i = 0; i < num.Length - 3; i++)
                    {
                        for (int j = num.Length - 1- i; j >0 ; j--)
                        {
                            if (num[j-1] > num[j])
                            {
                                int tem;
                                tem = num[j - 1];
                                num[j - 1] = num[j];
                                num[j] = tem;
                            }
                        }
                    }
        }
        

        image-20210703141233820

  • 相关阅读:
    由于信号量apache启动问题
    argument list too long
    Read-only file system处理
    fuser
    strace命令基本用法
    c++ 对vector和deque进行逆序排序问题
    C++ 遍历vector容器的三种方式
    C++ 中关于重复读取ifstream中的内容所需要注意的问题
    C++中的文件写入和读取(文本文件方式,二进制方式)
    Unity DoTween插件 在代码中改变Ease(运动方式)
  • 原文地址:https://www.cnblogs.com/moonsk/p/14966292.html
Copyright © 2011-2022 走看看