来自C#课无聊时间的成果
隔壁的dalao已经开始研究桶排序萌新表示瑟瑟发抖
输出效果如图:
本例在VS2017环境下编写,在VS2008及以下版本会出现不支持的语法
没错,学校机房,说的就是你!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Collections;
namespace BubbleSort
{
class Program
{
static void Main(string[] args)
{
ArrayList userinput = new ArrayList();//由于不知道用户会输入几个数,使用灵活的集合
string tempvar = "";//临时储存用户输入的字符
Console.WriteLine("冒泡排序算法 Demo Ver2.0");
for (int i = 0;i == i; i++)//为了计数方便而使用for,也可以使用while(true)
{
int n = i + 1;//集合的索引从0开始,而计数从1开始
Console.WriteLine("请输入第{n}个数(输入n结束):");
tryagain://goto跳回此处
try
{
tempvar = Console.ReadLine();//获取用户输入的string
userinput.Add(Convert.ToInt64(tempvar));//转换为int64后加入集合,若用户输入非法字符则捕获异常
}
catch
{
if (tempvar.ToLower() == "n")//输入n表示用户停止输入
{
break;//跳出循环开始排序
}
Console.WriteLine("您输入的数据不正确,请重新输入(输入n结束):");//输入的是其他非法字符
goto tryagain;//重新获取用户输入
}
}
Console.WriteLine("\n排序前的数组:\n");
foreach (var item in userinput)
{
Console.Write("{item},");//依次输出每个用户键入的数字
}
Console.WriteLine("\n按任意键开始排序……");
Console.ReadKey();
/*冒泡实现
先取第一个数,将这个数与其他i-1个数作比较,
如果这个数与对比的数相比更小,则相互换位(内循环),
这个集合有几个成员就这样判断几次(外循环),
*/
for (int i = 0; i < userinput.Count; i++)
{
for (int j = 1; j < userinput.Count; j++)
{
if ((Int64)userinput[j - 1] < (Int64)userinput[j])
{
Int64 temp = (Int64)userinput[j - 1];
userinput[j - 1] = userinput[j];
userinput[j] = temp;
}
}
}
//冒泡完成
Console.WriteLine("\n排序后的数组:\n");
foreach (var item in userinput)
{
Console.Write($"{item},");//依次读出集合中的数字排列
}
Console.WriteLine("\n按任意键继续……");
Console.ReadKey();
}
}
}