黑马程序员技术交流社区
标题:
冒泡排序
[打印本页]
作者:
殘遛の丶狳味
时间:
2013-8-4 12:41
标题:
冒泡排序
int[] numbers = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
for (int i = 0; i < numbers.Length - 1; i++)
{
for (int j = 0; j < numbers.Length - 1 - i; j++)
{
if (numbers[j] > numbers[j + 1])
{
int temp = numbers[j];
numbers[j] = numbers[j + 1];
numbers[j + 1] = temp;
}
}
}
for (int i = 0; i < numbers.Length; i++)
{
Console.WriteLine(numbers[i]);
}
Console.ReadKey();
复制代码
这是我们学的冒泡排序,老师说是面试必须有的面试题,但今天听同学说还有 优化的冒泡排序 ???那个怎么写啊?????
作者:
熊丽
时间:
2013-8-4 14:09
本帖最后由 熊丽 于 2013-8-4 22:15 编辑
冒泡排序的优化,就是增加一个判断条件,判断本次排序有没有进行交换,如果没有,则排序完成。譬如说楼主的这个数组例子,当设置一个IsChange变量时,第二个for循环执行完时,判断IsChange=false,便直接跳出循环,只循环了10次;而楼主的方法则要(numbers.Length-1)*(numbers.Length-1-i)次
int[] numbers = { 9, 8, 7, 6, 5, 4, 3, 2, 1, 0 };
bool IsChange ;//是否交换
for (int i = 0; i < numbers.Length-1 ; i++)
{
IsChange = false;
for (int j = 0; j <numbers.Length-1-i; j++)
{
if (numbers[j] > numbers[j + 1])
{
int temp = numbers[j];
numbers[j] = numbers[j + 1];
numbers[j + 1] = temp;
IsChange = true;
}
}
if (IsChange == false)
break ;
}
for (int i = 0; i < numbers.Length; i++)
{
Console.WriteLine(numbers[i]);
}
Console.ReadKey();
}
复制代码
作者:
张松
时间:
2013-8-4 17:43
为什么说是优化的呀!我看代码比原版多好多啊!能说一说那里有话了吗?
作者:
熊丽
时间:
2013-8-4 22:15
张松 发表于 2013-8-4 17:43
为什么说是优化的呀!我看代码比原版多好多啊!能说一说那里有话了吗?
。譬如说楼主的这个数组例子,当设置一个IsChange变量时,第二个for循环执行完时,判断IsChange=false,便直接跳出循环,只循环了10次;而楼主的方法则要(numbers.Length-1)*(numbers.Length-1-i)次
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2