菜鸟升级记——冒泡排序

  • 原理
      重复地走访过要排序的元素列,依次比较两个相邻的元素。走访元素的工作是重复地进行直到没有相邻元素需要交换,也就是说该元素已经排序完成。
  • 代码
            //创建数组
            int[] nums = new int[] { 23, 67, 3, 21, 19,36 };
            //外循环:循环次数
            //数组的长度为6,但i的初始化为0,所以nums.Length-1表示为整个数组的长度(0——5)
            //用二重循环实现冒泡,外循环变量设为i,内循环变量设为j
            //外循环重复6次,内循环也重复6次
            for (int i=0;i< nums.Length-1; i++)
            {
                //内循环:计算比较两个数的大小,nums.Length-1-i是为了减少计算,提高性能
                //比如在循环3的时候,当计算nums.Length-1-2,是因为之前23和3,67和3已经比较过了,那么在后边就不需要重复的比较
                //如果是从小到大排序,那么每次内循环将会把较大值移到后边
                for(int j = 0; j < nums.Length-1-i; j++)
                {
                    if (nums[j] > nums[j + 1])
                    {
                        //定义一个变量a,nums[j] > nums[j + 1]成立,将nums[j]的值赋给a(存放在中间变量a里边)
                        int a = nums[j];
                        //将nums[j + 1]的值赋给nums[j](被比较完的往前排)
                        nums[j] = nums[j + 1];
                        //将比较大的值赋给nums[j + 1],在此次循环完后,将作为下一次的初始值进行比较
                        nums[j + 1] = a;
                    }
                }
            }
            for (int j = 0; j < nums.Length; j++)
            {
                Console.Write(nums[j] + "\t");
            }
            Console.ReadKey();
  • 说明
      排序数组:int[] nums = new int[] { 23, 67, 3, 21, 19 ,35};
    第一趟排序:
      第一次排序:23和67比较,23小于67,不交换位置——23 67 3 21 19 35
      第二次排序:67和3比较,67大于3,交换位置——23 3 67 21 19 35
      第三次排序:67和21比较,67大于21,交换位置——23 3 21 67 19 35
      第四次排序:67和19比较,67大于19,交换位置——23 3 21 19 67 35
      第五次排序,67和35比较,67大于35,交换位置——23 3 21 19 35 67
    第二趟排序
      第一次排序:23和3比较,23大于3,交换位置——3 23 21 19 35 67
      第二次排序:23和21比较,23大于21,交换位置——3 21 23 19 35 67
      第三次排序:23和19比较,23大于19,交换位置——3 21 19 23 35 67
      第四次排序:23和35比较,23小于35,不交换位置——3 21 19 23 35 67
    第三趟排序
      第一次排序:3和21比较,3小于21,不交换位置——3 21 19 23 35 67
      第二次排序:21和19比较,21大于19,交换位置——3 19 21 23 35 67
      第三次排序:21和23比较,21小于23,不交换位置——3 19 21 23 35 67
    第四趟排序
      第一次排序:3和19比较,3小于19,不交换位置——3 19 21 23 35 67
      第二次排序:19和21比较,19小于21,不交换位置——3 19 21 23 35 67
    第五趟排序
      第一次排序:3和19比较,3小于19,不交换位置——3 19 21 23 35 67
    最终结果:3 19 21 23 35 67

  根据以上可得规律:N个数字要排序完成,总共进行N-1趟排序,每i趟的排序次数为(N-i)次;用双重循环语句,外层(外循环)控制循环多少趟,内层(内循环)控制每一趟的循环次数。
  冒泡排序的优点:每进行一趟排序,就会少比较一次,因为每进行一趟排序都会找出一个最值。

  • 小结
      不要遇到一点困难就悲观,不要遇到一点挑战就想投降,投降没有出路,只会被人蹂躏。要敢于亮剑,提刀跨马勇于杀敌。

猜你喜欢

转载自blog.csdn.net/Ellen5203/article/details/85098776