简体   繁体   English

使用插入排序方法对字符串数据数组进行排序

[英]Sorting an array of string data using the insertion sort method

I'm having trouble using insertion to sort an array of strings.我在使用插入对字符串数组进行排序时遇到问题。

When I compile the following code:当我编译以下代码时:

public class Project1 {

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String names[]=new String[5];
        int size=names.length;
        System.out.println("Enter the 5 car manufacturers: ");
        //Load Array
        for (int i = 0; i < 5; i++) {
            names[i] = input.nextLine();            
        }

        //Print descending order list
        String[] descSort;
        descSort=bubbleSortDesc(names);
        System.out.println("Car manufacturers listed sorted in descending order (via BubbleSort): ");
        for (int x=0; x < names.length; x++) {
            System.out.println(names[x]);
        }

        //Print ascending order list
        insertionSortAsc(names, size);
        System.out.println("Car manufacturers listed sorted in ascending order (via InsertionSort): ");
        for (int z=0; z < names.length; z++) {
            System.out.println(names[z]);
        }
    }¨

    public static String[] bubbleSortDesc(String[] names) {
        String temp;
        int passNum, i, result;
        for (passNum=1; passNum <= 4; passNum++) {
            for (i = 0; i<=(4-passNum); i++) {
                result=names[i].compareToIgnoreCase(names[i+1]);
                if(result<0) {
                    temp=names[i];
                    names[i]=names[i+1];
                    names[i+1]=temp;
                }
            }
        }
        return names;
    }

    public static void insertionSortAsc(String[] names, int i) {
        String temp = names[i];
        int j = i-1;
        while (j >= 0 && names[j].compareToIgnoreCase(temp) > 0) {
            names[j+1]=names[j];
            j--;
        }
        names[j+1]=temp; 
    }

    public static void insertionSort(String[] names, int n) {
        for(int i = 1; i<n; i++) {
            insertionSortAsc(names, i);
        }
    }
}

It gives me the error:它给了我错误:

cannot find symbol- method insert(java.lang.String[], int)

I suspect it has something to do with the fact that we were told to use our book as reference for the code, yet the book only deals with sorting data of type int and there are no examples for sorting string data.我怀疑这与我们被告知使用我们的书作为代码参考这一事实有关,但该书仅涉及对 int 类型的数据进行排序,并且没有对字符串数据进行排序的示例。

Any help is appreciated.任何帮助表示赞赏。

Edit: After fixing the error, the program compiles and executes but after inputting the data it crashes and gives me the following error编辑:修复错误后,程序编译并执行,但在输入数据后崩溃并给我以下错误

java.lang.ArrayIndexOutofBoundsException:
5

This error highlights the line String temp = names[i]此错误突出显示行String temp = names[i]

您尚未定义名为 insert 的方法。

This will work the way you intend:这将按照您的预期工作:

public static void insertionSortAsc(String[] names, int n)
{
    for(int i = 1; i<n; i++)
    {
        insert(names, i);
    }
}

public static void insert(String[] names, int i)
{
    String temp = names[i];
    int j = i - 1;

    while (j >= 0 && names[j].compareToIgnoreCase(temp)  > 0)
    {
        names[j + 1]= names[j];
        j--;
    }
    names[j + 1] = temp;
}
public static void insertionSort(int... arr) {
    for (int i = 1; i < arr.length; i++) {
        if (arr[i] >= arr[i - 1])
            continue;

        int j = i - 1;

        for (; j >= 0; j--)
            if (arr[j] < arr[i])
                break;

        int tmp = arr[i];
        System.arraycopy(arr, j + 1, arr, j + 2, i - j - 1);
        arr[j + 1] = tmp;
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM