【C#】数组的最大最小值

您所在的位置:网站首页 酸奶哪种牌子是中国出的 【C#】数组的最大最小值

【C#】数组的最大最小值

#【C#】数组的最大最小值| 来源: 网络整理| 查看: 265

定义一个数组,当这个数组了存满了数据,一般的操作:求和,求平均值,最大值,最小值。容易出错的是求最大最小值,因为这里面涉及到数组元素的比较! 最近看的C#视频中有几个有意思的求法!

int[] numbers = new int[] { -1, -56, -861, 45, 68, 48, 52, 45, 96, 42, 454 };//出现相同会不会报错? int temp = 0; for (int i = 0; i < numbers.Length - 1; i++) { if (numbers[i] > numbers[i + 1]) //最后一个和谁去比?所以比较的时候不能比较到数组最后一个元素,到倒数第二个元素就停止 { temp = numbers[i]; } else { temp = numbers[i + 1]; } } Console.WriteLine("最大值为{0}", temp); Console.ReadKey();

上面这段代码的核心思想:从前到后依次两个数组元素做比较,符合条件就给了临时变量temp并输出 存在的问题:for循环的最后一个元素是数组的倒数第二个元素,如果for循环中能够取到最后一个元素,那最后一个元素再去和它的下一个元素比较时就会出错,所以只能取到倒数第二个元素就停止,保证它能够有比较的对象!

int[] numbers = new int[] { -1, -56, -861, 45, 68, 48, 52, 45, 96, 42, 454 }; int temp = 0; for (int i = 0; i < numbers.Length - 1; i++) { if (numbers[i] < numbers[i + 1]) //这时候比较元素就不能写0,无法比较出负数 { temp = numbers[i]; } else { temp = numbers[i + 1]; } } Console.WriteLine("最小值为{0}", temp); Console.ReadKey();

上面这段代码的核心思想:从前到后依次两个数组元素做比较,符合条件就给了临时变量temp并输出 存在的问题: 1.单独只有负数是正确输出,如果有正有负(而且正数在后面,比到后面就会把正数中最小的输出) 2.先是负数部分比较完成,再是一正一负比较完成,在比到两个正数的时候,带有负数的比较结果被覆盖掉 3.所以代码适合只有负数的情况

由于依次比较所以才会有问题,所以不让数组元素内部依次比较了,给找个统一的标准 int[] nums = new int[] { 45, 85, -54, 964, 53, -12 }; int min = int.MaxValue;//最小值 int max = int.MinValue;//最大值 for (int i = 0; i < nums.Length; i++) { if (nums[i] > max) { max = nums[i];//求最大值 } if (nums[i] < min)//求最小值,每次都是和(比较过的所有)在做比较,而不是两两作比较 { min = nums[i]; } } Console.WriteLine("最大值为{0}", max); Console.WriteLine("最小值为{0}", min); Console.ReadKey();

上面这段代码的核心思想:定义一个最大值和最小值,先和这个最值比较,这样每次都是和(比较过的所有)在做比较,而不是两两作比较,就不会出现上面的数值被覆盖的问题! 有意思的事情: 1.要比较出最大值,第一个却是和int.MinValue作比较,因为没有比这个再小的值了,保证比较的第一个值能够成为目前最大的值 2.要比较出最小值,第一个却是和int.MaxValue作比较,因为没有比这个再大的值了,保证比较的第一个值能够成为目前最小的值

数组中的元素通常随意的存入,但需要它按照顺序输出,此时就先需要给数组元素排个序,比较经典的冒泡排序法(发明的人估计是在和饮料的时候盯着发呆了好久吧)

int[] nums = new int[] { 65, 898, 46, 65, 465, 454, 78, 21 }; int temp = 0; for (int j = 0; j < nums.Length - 1; j++) { for (int i = 0; i < nums.Length - 1 - j; i++) { if (nums[i] < nums[i + 1])//从小到大用>,从大到小用< { temp = nums[i]; nums[i] = nums[i + 1]; nums[i + 1] = temp; } } } for (int i = 0; i < nums.Length; i++) { Console.Write(nums[i] + "\t"); } Console.ReadKey();

这个算法需要先在纸上理解一遍,这个算法比较笨! 1.先拿出一个数组元素和它的下一个数组元素比较,如果满足条件,就调换;否则就拿当前数组元素的下一个数组元素和再下一个数组元素进行比较 2.当把你拿到的这个元素和其他元素都比较完了,到了当前比较顺序的合适位置的时候 3.在重头开始再拿下一个元素和所有做比较!

也可以利用C#语言中的排序类 这个是通过专门给数组排序的类来完成,但结果是从小到大,不能像冒泡排序法那样从大到小

int[] nums = new int[] { 465, 464, 31, 897, 138, 281, 487 }; Array.Sort(nums);//排序(从小到大)函数,C#里成为类,不叫函数 for (int i = 0; i < nums.Length; i++)//将Array.sort的结果输入 { Console.Write(nums[i] + "\t"); } Console.ReadKey();

可以通过这样的办法从大到小排序

int[] nums = new int[] { 465, 464, 31, 897, 138, 281, 487 }; Array.Sort(nums);//排序(从小到大)函数,C#里成为类,不叫函数 Array.Reverse(nums);//这是一个反转函数,如果提前已经排序,得到的就是从大到小的 for (int i = 0; i < nums.Length; i++)//将Array.sort的结果输入 { Console.Write(nums[i] + "\t"); } Console.ReadKey();

也可以通过排序类Array.sort+倒序输出来完成

int[] nums = new int[] { 465, 464, 31, 897, 138, 281, 487 }; Array.Sort(nums);//排序(从小到大)函数,C#里成为类,不叫函数 for (int i = nums.Length - 1; i >= 0; i--)//将Array.sort的结果逆向输入=Array.sort+Array.Reverse { Console.Write(nums[i] + "\t"); }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3