2012-03-29 75 views
5

我有一个家庭作业,按升序排列数组。显然,这是要手动完成的,而不使用任何种类的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; 
} 

我敢肯定,这是不正确的,但如果有人可以把我在正确的方向,将不胜感激!

+1

这可能是值得你首先看不同的排序算法的一些伪代码:http://maven.smith.edu/~thiebaut/java/sort/ – Magrangs 2012-03-29 14:45:19

+0

你应该使用某种排序算法? – twain249 2012-03-29 14:46:11

+0

除非明确要求您考虑排序算法,否则我建议您找到一个简单的排序算法并在代码中实现它。而不是“确定”你的代码不正确,只需测试一下并找出答案。 – alexis 2012-03-29 14:46:14

回答

5

您有一个几乎OK版本的Selection Sorter。你需要开始yx+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; 
} 
+0

您能否详细介绍一下交换部分? – 2012-03-29 15:13:02

+1

@AndrewDeForest当然,请参阅编辑。 – dasblinkenlight 2012-03-29 15:17:59

+0

感谢您提供关于'Arrays.copy'的提示!我有点俯视,但事实证明,这是我的问题:) – 2012-03-29 15:27:52

1

,而不是试图去创造自己的排序算法,我也希望你学什么已经存在。在此有现有技术的。

查看维基百科相关文章:Sorting algorithm

Bubble sort很容易实现,但具有二次复杂性(与当前的尝试相同)。

Quicksort也不难实现,并且具有更好的平均复杂度。

1

排序,你正在努力实现被称为Bubble sort - 维基百科条目是相当不错的,你应该阅读。虽然,它从来没有真正使用,因为有更好的选择 - Insertion sort(一个例子是Python中的Timsort,它是合并排序和插入排序的混合体)。这两个是适合您的想法的两个循环的基本算法,因此O(复杂度为O)。

你也应该考虑为您的分配不同的算法或者,至少,是知道的:

希望它能帮助。

0
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; 
     } 
    } 
} 
+2

不要只添加代码。描述你做了什么 – Jens 2016-09-30 13:49:33

+0

你在做什么? Minval未使用 – 2017-04-23 10:34:22

0
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); 
    } 
+0

请勿仅添加代码。描述你做了什么 – Jens 2016-09-30 13:49:16

-1
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]); 
    } 
+1

不要只添加代码。加入描述 – Jens 2016-09-29 13:35:10

+2

欢迎来到Stack Overflow!虽然这段代码可能有助于解决问题,但它并没有解释_why_和/或_how_它是如何回答这个问题的。提供这种附加背景将显着提高其长期教育价值。请[编辑]您的答案以添加解释,包括适用的限制和假设。 – 2016-09-29 14:15:56