【发布时间】:2012-11-27 02:08:16
【问题描述】:
我有一些关于在 C# 中对数组进行排序的任务。我一直在尝试我能想到的一切——没有运气。
任务是通过已知的排序算法(插入、选择、冒泡、快速)对整数数组进行排序。问题是,我必须ONLY 对最小的M 元素进行排序。
示例:我有一个包含 7 个元素 2 9 8 3 4 15 11 的数组,我需要对最小的 3 个元素进行排序,以便我的数组变为 2 3 4 9 8 15 11。
请帮忙,我似乎无法在 SO 中找到任何东西,也无法通过 Google 找到任何东西。我不要求为我做所有的算法,我只需要其中一个来掌握这怎么可能。
E:谢谢你的想法。我已经查看了您的所有建议,并完成了这样的插入排序:
static int[] insertSort(int[] arr, out int swaps, out int checks) {
int step = 0;
swaps = 0;
checks = 0;
for (int i = 0; i < arr.Length; i++) {
int min = arr[i], minind = i;
for (int j = i + 1; j < arr.Length; j++) {
checks++;
if (arr[j] < min) {
min = arr[j];
minind = j;
}
}
int temp = arr[minind];
if (step < M) {
for (int j = minind; j > i; j--) {
swaps++;
arr[j] = arr[j - 1];
}
arr[i] = temp;
swaps++;
step++;
}
}
return arr;
}
交换和检查 - 我的应用程序的要求。
附:我多次看到 SO 不喜欢为某人做作业。这就是我没有要求提供代码的原因,我只是询问了有关如何实现这一点的想法。
再次感谢那些在这里帮助过我的人。
【问题讨论】:
-
为什么这么难?您只是假装数组比实际短并对其进行排序。
-
@Earlz 再次阅读问题……
-
我有 95% 的把握,你的老师让你只对前几项进行排序的全部原因是,你不能只使用可以在网上找到的现有解决方案。 (至少要对它们进行足够的修改以证明您对它们的工作原理有所了解。)
-
效率有什么限制吗?一种天真的方法会很简单。
-
如何将
2 9 8 3 4 15 11中的前三个元素排序为2 3 4 9 8 15 11?