【问题标题】:Array, java - sort specific/dynamic part数组,java - 排序特定/动态部分
【发布时间】:2021-04-14 16:46:44
【问题描述】:

我被困在对数组进行排序(当然,不允许使用方法的一部分)。

随机生成数字的数组应该被排序和打印: 偶数(升序 - 奇数(降序)

发件人:830 281 380 162 679 587 944 143 940 862 546 730

至:162 380 546 730 830 862 940 944 - 679 587 281 143

我已经设法将偶数和赔率分开并对偶数进行排序,但在排序赔率时遇到了困难。

意识到我可能不是通过在两个不同的部分中单独排序来做到这一点的最有效的方法,但如果你能指出哪里出了问题,我将不胜感激。

想法是计算奇数和偶数,并使用这些数字来知道数组中的哪个位置进行循环排序,但这是在奇数部分失败。

对不起,frakencode...

int[] arr = new int[amountRandom];
        for (int i = 0; i < amountRandom; i++)
        {
            arr[i] = (int) (Math.random() * 1000); 
        }


int checkEvenOdd;
        int evenAmount = 0; 
        int oddAmount = 0;
        for(int i = 0; i < arr.length; i++)
        {
            checkEvenOdd = arr[i] % 2;

            if(checkEvenOdd == 0)
            {
                evenAmount++;
            }
            else
            {
                oddAmount++;
            }
        }

int arrLeft = 0;
        int arrRight;
        arrRight = arr.length - 1;

        while(arrLeft < arrRight) {
            while(arr[arrLeft] % 2 == 0 && arrLeft < arrRight) {
                arrLeft++;
            }
            while(arr[arrRight] % 2 != 0 && arrLeft < arrRight) {
                arrRight--;
            }
            if(arrLeft < arrRight) {
                int x = arr[arrLeft];
                arr[arrLeft] = arr[arrRight];
                arr[arrRight] = x;

                arrLeft++;
                arrRight--;
            }
        }

int i, j, minValue, minIndex, temp = 0;
    for (i = 0; i < evenAmount; i++) {
        minValue = arr[i];                      
        minIndex = i;
        for (j = i; j < evenAmount; j++) {  
            if (arr[j] < minValue) {
                minValue = arr[j];
                minIndex = j;
            }
        }
        if (minValue < arr[i]) {        
            temp = arr[i];
            arr[i] = arr[minIndex];
            arr[minIndex] = temp;
        }
    }

int maxValue, maxIndex, temp2 = 0;
    **for (i = evenAmount; i < amountRandom; i++)** {
        maxValue = arr[i];                      
        maxIndex = i;
        for (j = i; j > oddAmount; j++) {   
            if (arr[j] > maxValue) {
                maxValue = arr[j];
                maxIndex = j;
                }
            }
            if (maxValue > arr[i]) {        
                temp2 = arr[i];
                arr[i] = arr[maxIndex];
                arr[maxIndex] = temp2;
                }
            }

【问题讨论】:

    标签: java arrays sorting


    【解决方案1】:

    在这里查看各种sorting algorithms

    无论如何,您不必对排序算法进行硬编码,因为 Java 有自己的预制算法可供您使用:Java methods ready to use

    【讨论】:

    • 欢迎来到 Stack Overflow。请拨打tour,访问help center,尤其是阅读How to Answer。强烈建议不要只包含指向外部资源的链接的答案,因为链接最终会变坏(404),使您的答案无用。此外,如果您从其他网站将任何内容复制到您的答案中,则需要注明出处。
    • 感谢您的回答。参加课程,不幸的是,我们不允许使用这些方法。感谢您链接到排序算法,我已经看到它们是我的问题所在的应用程序。具体如何只循环奇数的最后一部分: for (i = evenAmount; i
    猜你喜欢
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    • 2019-04-17
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    相关资源
    最近更新 更多