冒泡排序

冒泡排序

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

posted @ 2021-07-03 14:30  moonsk  阅读(46)  评论(0编辑  收藏  举报