无法以递增方式获取排序数组

时间:2014-12-13 13:20:29

标签: java sorting

我创建了一个Java程序,它接受用户的选择,并创建一个这个大小的int数组。然后对数组进行排序和显示,并要求数字在数组中进行搜索。我尝试使用冒泡排序技术,结果总是变成一个降序数而不是升序数。

import java.util.*;
class mt {
    int i,M=0;
    public  void main() {
        Scanner sc=new Scanner(System.in);
        System.out.println("enter the size of array");
        int sizeOfArray=sc.nextInt();
        int arr[]= new int [sizeOfArray];
        int temp;
        System.out.println("enter the numbers");
        for (i=0; i<sizeOfArray; i++) {
            arr[i]=sc.nextInt();
        }
        System.out.println("the sorted array is below :");
        for ( i=0; i<sizeOfArray-1; i++){
            for (int j=0; j<sizeOfArray-2; j++) {
                if (arr[j]>arr[j+1]) {
                    temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }
            }
        }
        for (i=0; i<sizeOfArray; i++) {
            System.out.print(arr[i]+" ");
        }
        System.out.println();
        System.out.println("enter number to search");
        int srch=sc.nextInt();
        for (i=0; i<sizeOfArray; i++) {
            if (arr[i]==srch)
            {
                System.out.println("found at "+i);
                M++;
                break;
            }
            else if (M==0&&i==sizeOfArray-1)
            {
                System.out.println("number not found");
            }
        }
    }
}

2 个答案:

答案 0 :(得分:1)

按以下方式更改循环和条件

for ( i=0; i<arr.length - 1; i++){
    for (int j=i+1; j<arr.length; j++) {
        if (arr[i]>arr[j]) {
            temp=arr[i];
            arr[i]=arr[j];
            arr[j]=temp;
        }
    }
}

因此,您可以按升序获得结果数组。在您的情况下,当您从0迭代时,您缺少元素 - array.length - 2.

答案 1 :(得分:1)

首先,上面提到的代码有很多愚蠢的错误需要纠正: 1.需要在main()方法中添加“String args []”。 2.对于所有for循环,其中“i”是变量,需要将其定义为“int”。 3.变量“M”也需要定义。

现在,当我执行此代码的干运行时,产生的结果也不合适。 给出的输入如下: 输入数组的大小 五 输入数字 12 10 34 2 6 收到的产出如下: 排序数组如下: 2 10 12 34 6 输入要搜索的号码

现在输出不正确。 虽然它是按升序排列的......但最后一个元素仍会被遗漏。使用的双循环需要以不同的方式使用。请找到该部分中应包含的代码:

    for (int i=0; i<=sizeArr; i++){
        for (int j=0; j<sizeArr-1; j++) {
            if (arr[j]>arr[j+1]) {
                temp=arr[j];
                arr[j]=arr[j+1];
                arr[j+1]=temp;
            }
        }
    }

我希望现在这对你有用。