JavaRush /Blog Java /Random-FR /Tri par insertion
Helga
Niveau 26

Tri par insertion

Publié dans le groupe Random-FR
Les gars! Aidez-moi à trouver l'erreur ! Tri par insertion - 1La tâche est la suivante : écrire un tri par insertion d'un tableau en utilisant la recherche binaire et la fonctionSystem.arraycopy ; Voici le code :
package com.company;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;

public class Main
        {

    public static void main(String[] args) throws IOException {
        int[] arr = createArray();
        System.out.println(Arrays.toString(arr));
        //int[] arr1 = sortArray(arr);
        int[] arr1 = sortArray1(arr);
        System.out.println(Arrays.toString(arr1));


    }
            // creating array
    public static int[] createArray() throws IOException {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        int[] result = new int[10];
        for (int i = 0; i < result.length; i++)
            result[i] = Integer.parseInt(reader.readLine());
        return result;
    }

            // sorting array (insertions)
    public static int[] sortArray(int[] array) {
          for (int i = 1; i < array.length; i++)
                {
                    int currVal = array[i];
                    int keyPrev = i - 1;
                    while ((keyPrev >= 0)&&(currVal < array[keyPrev]))
                    {
                        array[keyPrev+1] = array[keyPrev];
                        array[keyPrev] = currVal;
                        keyPrev--;
                    }
                }
                return array;
            }

          // sorting array (insertion + binary Search + System.arraycopy)
    public static int[] sortArray1(int[] array) {
        for (int i = 1; i < array.length; i++)
        {
            int currVal = array[i];
            int keyPrev = i - 1;
            int searchResult = Arrays.binarySearch(array, 0, keyPrev, array[i]);
            if ((searchResult >=0))
            {
                System.arraycopy(array, searchResult, array, searchResult+1, keyPrev-searchResult+1);
                array[searchResult]=currVal;
            }
            else
            {
                int sR = Math.abs(searchResult)-1;
                System.arraycopy(array, sR, array, sR+1, keyPrev-sR+1);
                array[sR]=currVal;
            }

        }
        return array;
    }
}
Et voici la conclusion :
[7, 2, 8, 5, 7, 3, 5, 7, 3, 4]
[2, 3, 3, 4, 5, 5, 7, 7, 8, 7]
Logiquement ça devrait marcher, mais en réalité ça ne trie pas le dernier élément !
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION