• 冒泡排序


    冒泡排序

    冒泡排序动画
    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

  • 相关阅读:
    POJ 1741
    POJ 3107
    权限管理
    用户和组
    软件包管理简介
    制作网线
    认识vim编辑器
    linux 进阶命令
    linux 目录&基础命令
    在raw_input()中使用中文提示,在CMD下中文乱码问题解决。。。
  • 原文地址:https://www.cnblogs.com/moonsk/p/14966292.html
Copyright © 2020-2023  润新知