如何在C#中不排序一维数组,依次获取各最小值及对应索引
在C#中不排序数组依次获取下一个最小值的索引
实现思路
你提到的两层循环思路完全可行,核心是通过标记已选中的索引避免重复选取之前找到的最小值,每一轮遍历都在未被标记的元素里寻找当前最小值,记录对应的索引。
代码实现
using System; class Program { static void Main() { int[] a = { 10, 5, 20, 3 }; int length = a.Length; // 标记数组,记录索引是否已被选中 bool[] isSelected = new bool[length]; // 存储每一轮找到的最小值索引 int[] minIndices = new int[length]; for (int i = 0; i < length; i++) { // 初始化当前最小值为极大值,当前索引为无效值 int currentMin = int.MaxValue; int currentIndex = -1; // 内层循环遍历数组,筛选未被选中的最小值 for (int j = 0; j < length; j++) { if (!isSelected[j] && a[j] < currentMin) { currentMin = a[j]; currentIndex = j; } } // 记录当前索引并标记为已选中 minIndices[i] = currentIndex; isSelected[currentIndex] = true; } // 输出结果 Console.WriteLine("依次找到的最小值索引:"); for (int i = 0; i < minIndices.Length; i++) { Console.WriteLine($"第{i+1}个最小值的索引:{minIndices[i]},对应值:{a[minIndices[i]]}"); } } }
代码说明
isSelected数组:用来标记已被选为最小值的索引,确保每一轮只在未被选中的元素中查找。- 外层循环:执行次数等于数组长度,对应寻找第1到第N个最小值。
- 内层循环:遍历整个数组,找出未被标记元素中的最小值,记录其索引。
- 每轮找到索引后,将该索引标记为已选中,并存入结果数组。
运行代码后输出结果:
依次找到的最小值索引: 第1个最小值的索引:3,对应值:3 第2个最小值的索引:1,对应值:5 第3个最小值的索引:0,对应值:10 第4个最小值的索引:2,对应值:20
内容的提问来源于stack exchange,提问作者sina
相关产品推荐
相关产品推荐

