按升序顺序手动排序数组

时间:2012-03-29 14:42:52

标签: java arrays sorting

我有一个家庭作业,按升序对数组进行排序。显然,这是在不使用任何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;
}

我很确定这是不正确的,但如果有人能把我推向正确的方向,那将非常感激!

7 个答案:

答案 0 :(得分:6)

你有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;
}

答案 1 :(得分:1)

我没有试图发明你自己的排序算法,而是敦促你研究已经存在的东西。现有技术有 ton

查看维基百科文章:Sorting algorithm

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

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

答案 2 :(得分:1)

您尝试实现的排序称为Bubble sort - 维基百科条目非常好,您应该阅读它。虽然,它从来没有真正使用过,因为有更好的选择 - Insertion sort(一个例子是Python中的Timsort,它是Merge sort和Insertion排序的混合体)。这两个是基本算法,适合您的想法与两个循环,因此O(n 2 )复杂性。

您还应该为您的作业考虑不同的算法,或者至少要注意:

希望它有所帮助。

答案 3 :(得分:1)

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;  
        }
    }
}

答案 4 :(得分:0)

答案 5 :(得分: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);
    }

答案 6 :(得分:-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]);
    }