• C# 冒泡排序


       /// <summary>

       /// 冒泡排序

            /// </summary>
            public string Sort(int[] scoreArray)
            { 
                if(scoreArray.Length == 0)
                {
                    return "数组无值";
                }
     
                #region 核心算法
        //n个数两两对比,比较n-1次即可
                for (int i = 0; i < scoreArray.Length-1; i++)          // i
                {
          //排完一轮,最大的数已经排到了最后面,-i是为了固定已经排好的最值,并有缩小范围的作用
                    for (int j = 0; j <scoreArray.Length-1-i ; j++)     // j
                    {
            //如果前面的大鱼后面的,将大的放到后面
                        if (scoreArray[j] > scoreArray[j + 1])  
                        { 
                            //交换
                            int temp = scoreArray[j];
                            scoreArray[j] = scoreArray[j + 1];
                            scoreArray[j + 1] = temp;
                        }
                    }
                }
                #endregion 核心算法
     
                StringBuilder s = new StringBuilder(10);
                foreach (int item in scoreArray)
                {
                    s.Append(item.ToString()+",");
                }
                s = s.Remove(s.Length - 1, 1);
                return s.ToString();
            }
     
                解释:            
                 i:比较了多少轮
                -i:每一轮排除上一轮已经比较出的最大/最小值(相对于每一轮的最大/最小值)的个数
     
                第1轮  排除0个
                第2轮  排除1
                。。。
                第n轮  排除n-1
     
                总共有需要多少轮?也就是n是多少?很容易想到length-1,假设数组长度为2,那么比较一次就OK了。最后一轮排除的最大/最小值的个数是: length-2
                得出外层循环的写法  for (int i = 0; i < scoreArray.Length-1; i++)    ,此处i的最大值为scoreArray.Length-2应该很容易想明白!
     
     
        补充:要将n个数进行排序,那么要排多少轮呢?n-1轮,第一轮选出最大的,第二轮选出第二大的。。最后一轮选出次最小的(这一轮只剩两个数了),剩下的就是最小的不用再进行比较!
                 第一轮的比较范围是1至n
         第二轮的比较范围是1至n-1
         。
         。
         。
         最后一轮的比较范围是1至2。
                 
                //i 为要对比的轮数
        for(int i=0; i<n-1; i++)
        {
                      //j为每轮比较的范围
          for(int j=0; j<n-i-1)
          {
                            //这一轮中的相邻两个数两两对比
            if(a[j]>a[j+1])
            {
              //如果下面的气泡比上面的大,则让下面的气泡冒到上面
              int temp = a[j];
              a[j] = a[j+1];
              a[j+1]=temp;
            }
          }
        }
     
     
     
  • 相关阅读:
    从相册中获取图片
    Android中bitmap的相关处理
    Sublime Text的使用代码块安装的模块
    angular之控制器(0)
    13.程序集篇
    12.序列化与反序列篇
    11.泛型篇
    10.集合篇
    9.多态篇
    8.继承篇
  • 原文地址:https://www.cnblogs.com/Ellfelo/p/Effio.html
Copyright © 2020-2023  润新知