Rumah > Java > javaTutorial > Tatasusunan

Tatasusunan

王林
Lepaskan: 2024-07-25 22:24:23
asal
952 orang telah melayarinya

Tatasusunan

MergeSort

Salah satu algoritma pengisihan dengan kerumitan masa O(nlogn) dengan n ialah panjang tatasusunan yang diberikan.

///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>Kiraan penyongsangan</p>

<p>Berapa banyak perbandingan yang diperlukan sebelum tatasusunan diisih (diberikan indeks i, j tatasusunan arr[] , <strong>arr[i]> arr[j]</strong> ( untuk j> i) akan menambah kiraan penyongsangan sebanyak 1 setiap kali syarat ini dipenuhi.</p>

<p>nota: <em>kita boleh menggunakan pendekatan isihan cantuman yang sama untuk mencari kiraan penyongsangan (kod isihan cantuman telah diubah sedikit untuk menjadikannya lebih mudah dibaca)</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




          

            
  

            
        
Salin selepas log masuk

Atas ialah kandungan terperinci Tatasusunan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan