Maison  >  Article  >  Java  >  Tableaux

Tableaux

王林
王林original
2024-07-25 22:24:23897parcourir

Tableaux

Fusionner le tri

L'un des algorithmes de tri avec une complexité temporelle de O(nlogn) où n est la longueur du tableau donné.

///tc : O(nlogn)
//sc : O(n) for creating intermediate arrays a, b of size of part of subarray which is of size n
class Solution {
    public int[] sortArray(int[] nums) {
         merge(0,nums.length-1,nums);
         return nums;
    }
    public void merge(int start, int end, int arr[]){
        if(end>start){
            int mid = (start+end)/2;
            merge(start,mid,arr);
            merge(mid+1,end,arr);
            sort(start, mid,end, arr);
        }
    }
    public void sort(int start, int mid ,int end, int arr[]){
        int a[] = new int[mid-start+1];
        int b[] = new int[end-mid];
        for(int i = 0;i




<hr>

<p>Nombre d'inversions</p>

<p>Combien de comparaisons sont nécessaires avant que les tableaux ne soient triés ( étant donné l'index i, j du tableau arr[] , <strong>arr[i]> arr[j]</strong> ( pour j> i) incrémentera le l'inversion compte par 1 à chaque fois que cette condition est remplie.</p>

<p>remarque : <em>nous pouvons utiliser la même approche de tri par fusion pour trouver le nombre d'inversions (le code de tri par fusion a été légèrement modifié pour le rendre plus lisible)</em><br>
</p>

<pre class="brush:php;toolbar:false">class Solution {
    // arr[]: Input Array
    // N : Size of the Array arr[]
    // Function to count inversions in the array.

    static long inversionCount(long arr[], int n) {
        // Your Code Here
       //we can use merge sort
       long temp[]= new long[n];
       return merge(0,n-1,arr,temp);


    }
    public static long merge(int start, int end, long arr[],long[] temp){
        long count = 0;
        if(end>start){
            int mid = (start+end)/2;
            count+=merge(start,mid,arr,temp);
            count+=merge(mid+1,end,arr,temp);
           count+=sort(start, mid,end, arr,temp);
        }
        return count;
    }
    public static long sort(int start, int mid ,int end, long arr[],long [] temp){
        long count = 0;
        int i = start;
        int j = mid+1;
        int k = start;

        while(i arr[j] then all the values after ith index including will be
                // greater that jth index value hence count += mid-i+1
            }
            k++;
        }
        while(i




          

            
  

            
        

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn