string str = Console.ReadLine(); //让用户输入一组数字字符串
string[] strArray = str.Split(" ");//分离用户输入的字符串
int[] intArray = new int[strArray.Length];//新声明一个整数数组保存用户输入的分离后的字符串 strArray.Length就是数组的长度
for (int i = 0; i < strArray.Length; i++)//for循环遍历用户输入的数组 也就是strArray数组中的每个数
{
int number = Convert.ToInt32(strArray[i]);//将遍历出的数组保存到number中 因为数组的长度是整数 转为int32保存
intArray[i] = number;//遍历后的number就是组数的长度 赋值回intArray中
//Console.Write(intArray[i] + " ");//输出
}
//假如用户输入n个数 那么需要比较的次数就是n-1
for (int j = 0; j < intArray.Length - 1; j++)//对用户输入的数进行比较(n-1轮)
{
//不管j=多少 i总是要遍历次数为intArray.length-1次
//因为在第一次比较后 最大的数字已经在最后了
//不需要多余的比较 而且每次都是 所以可以优化算法intArray.length-1-j次(这里对算法进行第一次优化)
bool isChange = false;//(这里对算法进行第二次优化)判断是对比是否有变化
for (int i = 0; i < intArray.Length - 1 - j; i++)
//外层比较多少轮 内层对输入的数进行比较 Length - 1是因为不需要比较最后一个数 因为它后面没有数
{
if (intArray[i] > intArray[i + 1])//比较当前数字是否比自身后面的数字大
{
//如果左边大于右边就需要交换
int temp = intArray[i];//先将当前的数保存
intArray[i] = intArray[i + 1];//将大于当前的数赋值给当前数
intArray[i + 1] = temp;//然后将保存好的当前数字赋值回后面的数字完成交换
isChange = true;//有变化就继续比较说明还不是有序的状态
}
}
if (isChange == false)//如果没有变化 停止 当前已经是有序状态 不需要再执行比较
{
break; //写在哪个循环就跳出哪个循环
}
//Console.Write(intArray + " ");
}
foreach (int k in intArray)//遍历的是最新声明的int数组 intArrary
{
Console.Write(k + " ");//遍历输出
}