黑马程序员技术交流社区
标题:
面试必考题之冒泡排序
[打印本页]
作者:
Dangerous
时间:
2013-3-4 23:43
标题:
面试必考题之冒泡排序
//定义一个数组
int[] numbers = { 1, 36, 5, 6, 618, 8, 9, 3, 34, 33, 4 };
//冒泡排序口诀:forfor,外层长度-1,内层长度-1-i
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;
}
}
}
//遍历数组
foreach (var item in numbers)
{
Console.WriteLine(item);
}
作者:
谢玉成
时间:
2013-3-4 23:52
{:soso_e130:}好好学习>..
作者:
HM张扬
时间:
2013-3-5 00:02
就这个没看懂呢
作者:
史金阳
时间:
2013-3-5 00:21
给你个升级版吧冒泡2.0版
static void Main(string[] args)
{
bool isExchanged = false;
int temp;//定义一个中间变量
int[] arr = new int[] { 1,3, 9, 27, 4, 8, 32, 11,4 };//定义一个数组,并赋值
Console.WriteLine("排序前:");
foreach (int m in arr)
{
Console.Write(m + " ");//循环遍历数组输出其中元素
}
Console.WriteLine();
for (int i = arr.Length - 1; i >= 0; i--)
{//从后往前找
isExchanged = false;
for (int j = i - 1; j >= 0; j--)
{
if (arr[i] < arr[j])
{//如果后面的值小于前面的值,则交换位置
temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
isExchanged = true;
}
}
if (!isExchanged)//一遍比较过后如果没有进行交换则退出循环
break;
}
Console.WriteLine("从小到大排序后:");
foreach (int n in arr)//循环遍历排序后的数组元素并输出
Console.Write(n + " ");
Console.ReadKey();
}
作者:
岳珅
时间:
2013-3-5 05:35
金阳兄的冒泡V2.0棒棒的啊!
优化的相当好- -谢谢你!!
每次逛论坛都有新发现{:soso_e102:}
金阳兄的思路是:
比如我是1 3 2 4 5 6这样的数组,用两个for循环,会浪费好几次循环在那里做无用功,它只用循环一次就足够排序完成了。
所以金阳兄引入一个简单的isExchanged直接检测如果这一遍比较一次交换都没有进行的话,那么isExchanged的值就还是false,那么就可以判断数组已经排序完成了,可以跳出循环,不必再继续接下来的循环了。
作者:
史金阳
时间:
2013-3-7 14:04
再发个冒泡2.1 原理一样 但感觉比2.0好
//int[] list = { 1, 0, 6, 7, 5, 9, 2, 8, 4, 3 };
//Console.Write("排序前:");
//// 遍历数组输出所有元素
//for (int i = 0; i < list.Length; i++)
// Console.Write(list[i]);
//Console.WriteLine();
//int tmp = 0; // 用于交换变量
//bool isOK = false; // 表示是否还需要排序
//while (!isOK)
//{
// isOK = true;
// for (int i = 0; i < list.Length - 1; i++)
// {
// // 如果下一个元素大于这个元素
// if (list[i] > list[i + 1])
// {
// // 交换两者
// tmp = list[i];
// list[i] = list[i + 1];
// list[i + 1] = tmp;
// // 进行了一次交换表明还需要再次排序
// isOK = false;
// }
// }
//}
//Console.Write("排序后:");
//for (int i = 0; i < list.Length; i++)
// Console.Write(list[i]);
//Console.WriteLine();
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2