我无法让它工作,我试图通过使用for循环按升序排列数组的值。
int[] arr = new int[5] { 5, 6, 2, 4, 1 };
for (int i = 0; i <= arr.Length; i++)
{
if (arr[i] > arr[i + 1])
{
int temp = arr[i + 1];
arr[i] = arr[i + 1];
arr[i] = temp;
}
Console.Write(arr[i]);
}
如果你想做你自己的排序,那么仅仅循环浏览一次项目并交换它们是不够的。与此最接近的是气泡排序算法,在该算法中,您可以反复遍历数组,直到没有更多的项可以交换:
int[] arr = new int[5] { 5, 6, 2, 4, 1 };
bool swapped = true;
while (swapped) {
swapped = false;
for (int i = 0; i < arr.Length - 1; i++) {
if (arr[i] > arr[i + 1]) {
swapped = true;
int temp = arr[i + 1];
arr[i] = arr[i + 1];
arr[i] = temp;
}
}
}
for (int i = 0; i < arr.Length - 1; i++) {
Console.Write(arr[i]);
}
还有一些内置的方法可以对数据进行排序,这些方法更易于使用,效率更高,并且已经过全面测试:
int[] arr = new int[5] { 5, 6, 2, 4, 1 };
Array.Sort(arr);
int[]数组={11,33,5,-3,19,8,49};
int temp;
for (int i = 0; i < Array.Length - 1; i++)
{
for (int j = i + 1; j < Array.Length; j++)
{
if (Array[i] > Array[j])
{
temp = Array[i];
Array[i] = Array[j];
Array[j] = temp;
}
}
}
Console.Write("Sorted:");
foreach (int sort in Array)
Console.Write("{0} ", sort);
我假设您没有使用数组。排序
,因为这是一个学习练习;没有其他方法可以避免这个非常常见的库函数。
您的算法不起作用的原因是,仅遍历一次数组并交换无序项是不够的。当数组几乎已排序,但第一个元素位于末尾时,尝试将此作为一个心理实验,如下所示:
2 3 4 5 6 7 1
一条路径会让您更接近,但它不会让您一直到达排序数组:
2 3 4 5 6 1 7
如您所见,必须多次重复此过程,直到对数组进行排序。如何知道数组已排序?您知道,当整个内部循环没有一次交换时。
以下是如何实现这一点:
bool didSwap;
do {
didSwap = false;
for (int i = 0; i < arr.Length-1; i++)
{
if (arr[i] > arr[i + 1])
{
int temp = arr[i + 1];
arr[i + 1] = arr[i];
arr[i] = temp;
didSwap = true;
}
}
} while (didSwap);
for (int i = 0; i != arr.Length ; i++) {
Console.Write(arr[i]);
}
注意代码中的几个更改:
arr.length-1
,而不是arr.length
,因为否则您的最后一次检查将超出数组的边界。 我在学校的任务是创建一个程序,以升序排列数组的值。它几乎就在那里,但每当我输入“44 55 66 22 33 11 77 99 88 66”或它输出的任何数字 -858993460,11,22,33,44,55,66,66,77,88,或开头为负数 第一个数字到底怎么了?我是不是缺了什么? 我对C++很陌生,我不太明白这里的问题。如果有什么建议我可以用请告诉他们。 }
有人能提供帮助,如何检查排序降序数组以及?干杯!
我对这件事还不熟悉,很困惑。
这是第一个数组。 用户可以输入不超过100个整数,如果用户输入负数,将停止。 这是第二个数组。 用户可以输入不超过100个整数,如果用户输入负数将结束。 打印出第一个整数列表 rint出第二个整数列表 问题在于,它不会检查数组是否按升序排列。↓↓↓ 如果inOder=1,我需要合并这两个数组。
问题内容: 我有一个关于如何按给定列对整个数组/ recarray排序的简单问题。例如,给定数组: 我想按第一列排序数据以返回: 问题答案: 使用,其中是要排序的列索引:
我下面的代码不起作用,我也不知道为什么。 它编译得很好,但结果似乎没有排序。
我试图建立一个方法,将排序一个二维数组的双打按列。基于所提供的规范,此方法也不应该采用长度不等的行的粗糙数组。我正在使用双[][]mdarray={{3.0, 4.0, 1.0, 8.0},{13.0, 2.0, 12.0, 9.0}测试这个 使用打印方法时,应将其显示为 3.0, 2.0, 1.0, 8.0, 13.0, 4.0, 12.0, 9.0, 使用单独的打印方法输出结果时,数组似乎没有
问题如下: 由一个固定数量的n个端到端连接的段组成的列表,每个段已经按升序排列。 我考虑过使用mergesort,基本情况是,如果等于n,那么返回并合并它们,因为我们已经知道它们是排序的,但是如果我有3个段,它将不起作用,因为我除以2,你不能将3个段平均分成两部分。 另一种方法类似于合并排序。所以我对每个段使用n个堆栈,如果L[i],我们可以识别它 如果你有主意的话,伪代码会很好。 编辑: 一个例