A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 殘遛の丶狳味 中级黑马   /  2013-8-4 12:41  /  1288 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  1. int[] numbers = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
  2.             for (int i = 0; i < numbers.Length - 1; i++)
  3.             {
  4.                 for (int j = 0; j < numbers.Length - 1 - i; j++)
  5.                 {
  6.                     if (numbers[j] > numbers[j + 1])
  7.                     {
  8.                         int temp = numbers[j];
  9.                         numbers[j] = numbers[j + 1];
  10.                         numbers[j + 1] = temp;
  11.                     }
  12.                 }
  13.             }

  14.             for (int i = 0; i < numbers.Length; i++)
  15.             {
  16.                 Console.WriteLine(numbers[i]);
  17.             }
  18.             Console.ReadKey();
复制代码
这是我们学的冒泡排序,老师说是面试必须有的面试题,但今天听同学说还有 优化的冒泡排序 ???那个怎么写啊?????

3 个回复

倒序浏览
本帖最后由 熊丽 于 2013-8-4 22:15 编辑

冒泡排序的优化,就是增加一个判断条件,判断本次排序有没有进行交换,如果没有,则排序完成。譬如说楼主的这个数组例子,当设置一个IsChange变量时,第二个for循环执行完时,判断IsChange=false,便直接跳出循环,只循环了10次;而楼主的方法则要(numbers.Length-1)*(numbers.Length-1-i)次
  1.   int[] numbers = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
  2.             bool IsChange ;//是否交换
  3.             for (int i = 0; i < numbers.Length-1 ; i++)
  4.             {
  5.                 IsChange = false;
  6.                 for (int j = 0; j <numbers.Length-1-i; j++)
  7.                 {
  8.                     if (numbers[j] > numbers[j + 1])
  9.                     {

  10.                         int temp = numbers[j];

  11.                         numbers[j] = numbers[j + 1];
  12.                         numbers[j + 1] = temp;
  13.                         IsChange = true;

  14.                     }

  15.                 }
  16.                 if (IsChange == false)
  17.                     break ;

  18.             }
  19.             for (int i = 0; i < numbers.Length; i++)
  20.             {

  21.                 Console.WriteLine(numbers[i]);

  22.             }

  23.             Console.ReadKey();
  24.         }
复制代码
回复 使用道具 举报
为什么说是优化的呀!我看代码比原版多好多啊!能说一说那里有话了吗?
回复 使用道具 举报
张松 发表于 2013-8-4 17:43
为什么说是优化的呀!我看代码比原版多好多啊!能说一说那里有话了吗?

。譬如说楼主的这个数组例子,当设置一个IsChange变量时,第二个for循环执行完时,判断IsChange=false,便直接跳出循环,只循环了10次;而楼主的方法则要(numbers.Length-1)*(numbers.Length-1-i)次
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马