Сортировка вставками — как принять ввод и распечатать отсортированный массив

Я пытался сделать программу сортировки вставками, которая принимает любой тип данных (Int, Double, String), а затем печатает отсортированный массив. Я знаю, что мой код работает, но я не могу понять настоящую проблему.

import java.util.*;
public class MyInsertionSort 

{
    public static void main(String[] args) 
    { 
        Scanner in = new Scanner(System.in);
        System.out.print("Enter anything you want");
        String insertionSort = in.nextLine(); 
        int num=Integer.parseInt(insertionSort);
        String array[] = new String [num];
        for (int i = 0; i < array.length; i++)
        {
            System.out.print("Input the Number at array index "+i+": ");
            array[i] = in.nextLine();
        }

    public static void insertionSort(int array[]) 
    { 
        int n = array.length; 
        for (int j = 1; j < n; j++) 
        { 
            int key = array[j]; 
            int i = j-1; 
            while ( (i > -1) && ( array [i] > key ) ) 
            { 
                array [i+1] = array [i]; i--; 
            } 
            array[i+1] = key; 
            printNumbers(array); 
        }
    }
} 

person Ajax    schedule 25.02.2016    source источник
comment
этот сайт предназначен для решения проблем, а не для поиска проблем. Найди, что не так, тогда мы сможем ответить на это :s   -  person gallickgunner    schedule 25.02.2016
comment
Вам не хватает закрывающей скобки перед public static void insertionSort(int array[]). Вы должны научиться правильно делать отступы в своем коде, чтобы эти ошибки были более очевидными.   -  person Andy Turner    schedule 25.02.2016
comment
вы должны проверить общий метод с параметрами или использовать перегрузку метода, так как ваш код работает.. это будет легко, я думаю   -  person Eliethesaiyan    schedule 25.02.2016
comment
В этом коде много ошибок, например, основной метод не вызывает метод insertionSort   -  person Thanga    schedule 25.02.2016
comment
Чтобы добавить, Вы не написали никакой логики для сортировки строк или двойных.   -  person AbhishekAsh    schedule 25.02.2016
comment
Итак, совершенно очевидно, что ваш код НЕ работает. Так задайте нам конкретный вопрос. Где мы можем помочь?   -  person Erick G. Hagstrom    schedule 25.02.2016


Ответы (1)


Общий тип Сортировка вставками

Я быстро проверил и исправил все ошибки. Просто сравните свой код и этот в инструменте сравнения. Так что вы можете узнать, что вы пропустили. Этот код на данный момент способен выполнять сортировку с несколькими типами данных, такими как String, double, int. Его можно изменить для любого объекта, который реализует сравнимый.

Ниже рабочий код

import java.util.Scanner;
public class MyInsertionSort 
{
    public static void main(String[] args) 
    { 
        Scanner in = new Scanner(System.in);

        System.out.print("Enter data type to sort : ");
        String type = in.nextLine(); 

        System.out.print("Enter number of elements : ");
        String insertionSort = in.nextLine(); 
        int num=Integer.parseInt(insertionSort);
        String array[] = new String[num];
        for (int i = 0; i < array.length; i++)
        {
            System.out.print("Input the Number at array index "+i+": ");
            array[i] = in.nextLine();
        }
        MyInsertionSort.insertionSortByType(array,type);
        in.close();
    }


    public static void insertionSortByType(String array[], String type)
    {
        switch (type) {
            case "double":
                Double[] ConvertedArrayDouble = new Double[array.length];
                for (int i = 0; i<array.length; i++) ConvertedArrayDouble[i] = Double.parseDouble(array[i]);
                MyInsertionSort.insertionSort(ConvertedArrayDouble);
                break;
            case "int":
                Integer[] ConvertedArrayInt = new Integer[array.length];
                for (int i = 0; i<array.length; i++) ConvertedArrayInt[i] = Integer.parseInt(array[i]);
                MyInsertionSort.insertionSort(ConvertedArrayInt);
                break;
            default:
                MyInsertionSort.insertionSort(array);   
        }
    }

    public static <E extends Comparable<? super E>> void insertionSort(E array[]) 
    { 
        int n = array.length; 
        for (int j = 1; j < n; j++) 
        { 
            E key = array[j]; 
            int i = j-1; 
            while ( (i > -1) && ( array[i].compareTo(key) > 0 ) ) 
            { 
                array [i+1] = array [i]; i--; 
            } 
            array[i+1] = key; 
        }

        printNumbers(array); 
    }

    public static <E> void printNumbers(E array[]) {
        for (E i : array) {
            System.out.println(i);
        }
    }
} 
person Thanga    schedule 25.02.2016
comment
ОП говорит, что хочет иметь возможность принимать любой тип данных, но этот код читает только ints (используя nextInt()). У него были проблемы, но вы пошли по другому пути. - person Erick G. Hagstrom; 25.02.2016
comment
@ErickG.Hagstrom Я обновил свой ответ, чтобы использовать общие типы в качестве входных данных и сортировать. Не могли бы вы проверить сейчас? - person Thanga; 26.02.2016
comment
Вы прикладываете к этому много усилий. Я уважаю это. Пока мы знаем заранее, какие данные пользователь хочет отсортировать, т. е. тип array, ваш подход выглядит разумным. - person Erick G. Hagstrom; 26.02.2016