按升序手动对数组进行排序
我有一个家庭作业,按升序排列数组。显然,这是要手动完成的,而不使用任何种类的sort()
函数。按升序手动对数组进行排序
我想这样做,我需要两个for
循环:第一个循环遍历现有的数组,并创建一个临时值与数组的值和索引。第二个循环会将临时值与现有值进行比较并对它们进行排序。我一直试图编写代码,但我似乎无法做到。这里是我想出了最新的方法:
public int[] sortArray (int[] inArray)
{
//Construct the array we're using here
int[] newArray = inArray;
for(int x = 0; x < a.length; x++) //a.length = # of indices in the array
{
int tempValue = a[x];
int tempIndex = x;
for(int y = 0; y < a.length; y++)
{
if(tempValue < a[y])
{
newArray[x] = tempValue;
}
}
}
return newArray;
}
我敢肯定,这是不正确的,但如果有人可以把我在正确的方向,将不胜感激!
您有一个几乎OK版本的Selection Sorter。你需要开始y
在x+1
,而不是在0
。否则,您将重新扫描阵列的排序部分。您还应该注意,选择排序是一种就地算法;如果你正在寻找一个拷贝的数组,你应该使用Arrays.copy
方法,否则int[] newArray = inArray;
正在创建一个别名,而不是副本。最后,在嵌套循环的if
语句应该交换a[x]
和a[y]
,不能简单地把tempValue
在:
if(newArray[x] < newArray [y]) {
int tempValue = newArray[y];
newArray[y] = newArray[x];
newArray[x] = tempValue;
}
您能否详细介绍一下交换部分? – 2012-03-29 15:13:02
@AndrewDeForest当然,请参阅编辑。 – dasblinkenlight 2012-03-29 15:17:59
感谢您提供关于'Arrays.copy'的提示!我有点俯视,但事实证明,这是我的问题:) – 2012-03-29 15:27:52
,而不是试图去创造自己的排序算法,我也希望你学什么已经存在。在此有现有技术的。
查看维基百科相关文章:Sorting algorithm。
Bubble sort很容易实现,但具有二次复杂性(与当前的尝试相同)。
Quicksort也不难实现,并且具有更好的平均复杂度。
创建一个新的数组绝对是不必要的,而不是你应该做的。
有关如何对列表排序,查了一下谷歌所提供的一些想法:
排序,你正在努力实现被称为Bubble sort - 维基百科条目是相当不错的,你应该阅读。虽然,它从来没有真正使用,因为有更好的选择 - Insertion sort(一个例子是Python中的Timsort,它是合并排序和插入排序的混合体)。这两个是适合您的想法的两个循环的基本算法,因此O(复杂度为O)。
你也应该考虑为您的分配不同的算法或者,至少,是知道的:
希望它能帮助。
int minval = input[0];
int temp=0;
for(int i = 0; i< input.length; i++)
{
for(int j = 0; j< input.length-1; j++)
{
if(input[j+1]<input[j])
{
temp=input[j+1];
input[j+1]=input[j];
input[j]=temp;
}
}
}
不要只添加代码。描述你做了什么 – Jens 2016-09-30 13:49:33
你在做什么? Minval未使用 – 2017-04-23 10:34:22
int arr[] = new int[]{10, 20, 5, 6, 30, 1, 2};
boolean bool = true;
int t = 0;
while (bool) {
for (int i = 0; i < arr.length - 1; i++) {
if (arr[i] > arr[i + 1]) {
int c = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = c;
t++;
}
}
if (t == 0) {
bool = false;
}
t = 0;
}
for (int y : arr) {
System.out.println(y);
}
请勿仅添加代码。描述你做了什么 – Jens 2016-09-30 13:49:16
int[] number = { 1,2,1,3,5,4 };
int temp;
for (int i = 0; i < number.length; i++)
{
for (int j = i + 1; j < number.length; j++)
{
if (number[i] > number[j])
{
temp = number[i];
number[i] = number[j];
number[j] = temp;
}
}
}
for (int i = 0; i <number.length; ++i)
System.out.println(number[i]);
}
不要只添加代码。加入描述 – Jens 2016-09-29 13:35:10
欢迎来到Stack Overflow!虽然这段代码可能有助于解决问题,但它并没有解释_why_和/或_how_它是如何回答这个问题的。提供这种附加背景将显着提高其长期教育价值。请[编辑]您的答案以添加解释,包括适用的限制和假设。 – 2016-09-29 14:15:56
这可能是值得你首先看不同的排序算法的一些伪代码:http://maven.smith.edu/~thiebaut/java/sort/ – Magrangs 2012-03-29 14:45:19
你应该使用某种排序算法? – twain249 2012-03-29 14:46:11
除非明确要求您考虑排序算法,否则我建议您找到一个简单的排序算法并在代码中实现它。而不是“确定”你的代码不正确,只需测试一下并找出答案。 – alexis 2012-03-29 14:46:14