Jadual Kandungan
Input
Output
Algoritma
cantum(array, tempArray, left, mid, right)
mergeSort(array, tempArray, left, right)
Contoh
Rumah pembangunan bahagian belakang C++ Program C/C++ yang ditulis menggunakan algoritma isihan gabungan untuk mengira nombor terbalik dalam tatasusunan

Program C/C++ yang ditulis menggunakan algoritma isihan gabungan untuk mengira nombor terbalik dalam tatasusunan

Aug 25, 2023 pm 07:33 PM
merge sort program c/c nombor terbalik

Program C/C++ yang ditulis menggunakan algoritma isihan gabungan untuk mengira nombor terbalik dalam tatasusunan

Perwakilan songsang bagi tatasusunan; Apabila tatasusunan sudah diisih, 0 pembalikan diperlukan, manakala dalam kes lain, jika tatasusunan diterbalikkan, bilangan pembalikan maksimum dicapai.

Untuk menyelesaikan masalah ini, kami akan mengikuti kaedah isihan gabungan untuk mengurangkan kerumitan masa dan menggunakan algoritma bahagi dan takluk.

Input

A sequence of numbers. (1, 5, 6, 4, 20).
Salin selepas log masuk

Output

Bilangan pembalikan yang diperlukan untuk mengisih nombor dalam tertib menaik.

Here the number of inversions are 2.
First inversion: (1, 5, 4, 6, 20)
Second inversion: (1, 4, 5, 6, 20)
Salin selepas log masuk

Algoritma

cantum(array, tempArray, left, mid, right)

Input - dua tatasusunan, yang telah digabungkan, kiri, kanan dan indeks tengah.

Output - tatasusunan digabungkan dalam susunan disusun.

Begin
   i := left, j := mid, k := right
   count := 0
   while i <= mid -1 and j <= right, do
      if array[i] <= array[j], then
         tempArray[k] := array[i]
         increase i and k by 1
      else
         tempArray[k] := array[j]
         increase j and k by 1
         count := count + (mid - i)
   done
   while left part of the array has some extra element, do
      tempArray[k] := array[i]
      increase i and k by 1
   done
   while right part of the array has some extra element, do
      tempArray[k] := array[j]
      increase j and k by 1
   done
   return count
End
Salin selepas log masuk

mergeSort(array, tempArray, left, right)

Input - Diberi tatasusunan dan tatasusunan sementara, indeks kiri dan kanan tatasusunan.

Output - Bilangan pasangan tertib terbalik selepas diisih.

Begin
   count := 0
   if right > left, then
      mid := (right + left)/2
      count := mergeSort(array, tempArray, left, mid)
      count := count + mergeSort(array, tempArray, mid+1, right)
      count := count + merge(array, tempArray, left, mid+1, right)
   return count
End
Salin selepas log masuk

Contoh

Demonstrasi masa nyata

#include <iostream>
using namespace std;
int merge(int arr[], int temp[], int left, int mid, int right) {
   int i, j, k;
   int count = 0;
   i = left; //i to locate first array location
   j = mid; //i to locate second array location
   k = left; //i to locate merged array location
   while ((i <= mid - 1) && (j <= right)) {
      if (arr[i] <= arr[j]){ //when left item is less than right item
      temp[k++] = arr[i++];
      } else {
         temp[k++] = arr[j++];
         count += (mid - i); //find how many convertion is performed
      }
   }
   while (i <= mid - 1) //if first list has remaining item, add them in the list
      temp[k++] = arr[i++];
   while (j <= right) //if second list has remaining item, add them in the list
      temp[k++] = arr[j++];
   for (i=left; i <= right; i++)
      arr[i] = temp[i]; //store temp Array to main array
   return count;
}
int mergeSort(int arr[], int temp[], int left, int right){
   int mid, count = 0;
   if (right > left) {
      mid = (right + left)/2; //find mid index of the array
      count = mergeSort(arr, temp, left, mid); //merge sort left sub array
      count += mergeSort(arr, temp, mid+1, right); //merge sort right sub array
      count += merge(arr, temp, left, mid+1, right); //merge two sub arrays
   }
   return count;
}
int arrInversion(int arr[], int n) {
   int temp[n];
   return mergeSort(arr, temp, 0, n - 1);
}
int main() {
   int arr[] = {1, 5, 6, 4, 20};
   int n = 5;
   cout << "Number of inversions are "<< arrInversion(arr, n);
}
Salin selepas log masuk

Output

Number of inversions are 2
Salin selepas log masuk

Atas ialah kandungan terperinci Program C/C++ yang ditulis menggunakan algoritma isihan gabungan untuk mengira nombor terbalik dalam 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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Apakah program C/C++ untuk nombor Catalan ke-n? Apakah program C/C++ untuk nombor Catalan ke-n? Sep 11, 2023 pm 10:33 PM

Nombor Catalan ialah satu siri nombor. Nombor Catalan ialah jujukan nombor asli yang muncul dalam pelbagai masalah pengiraan, selalunya melibatkan objek yang ditakrifkan secara rekursif. Cn ialah bilangan perkataan Dyck dengan panjang 2n. Perkataan Dyck ialah rentetan yang terdiri daripada n X dan n Y supaya bilangan Y tidak melebihi bilangan X dalam mana-mana segmen awal rentetan. Sebagai contoh, berikut ialah perkataan Dyck dengan panjang 6: XXXYYYXYXXYYXYXYXYXXYYXYXXYXYY Mentafsir semula simbol )(()()()()(())()(()())Cn bukan faktor yang boleh sepenuhnya. dikelilingi oleh n+1 faktor

Program C/C++ yang ditulis menggunakan algoritma isihan gabungan untuk mengira nombor terbalik dalam tatasusunan Program C/C++ yang ditulis menggunakan algoritma isihan gabungan untuk mengira nombor terbalik dalam tatasusunan Aug 25, 2023 pm 07:33 PM

Perwakilan terbalik tatasusunan; berapa banyak perubahan yang diperlukan untuk menukar tatasusunan ke dalam bentuk yang diisih. Apabila tatasusunan sudah diisih, 0 pembalikan diperlukan, manakala dalam kes lain, jika tatasusunan diterbalikkan, bilangan pembalikan maksimum akan dicapai. Untuk menyelesaikan masalah ini, kami akan mengikuti kaedah isihan gabungan untuk mengurangkan kerumitan masa dan menggunakan algoritma bahagi dan takluk. Input Asequenceofnumbers.(1,5,6,4,20 Output bilangan pembalikan yang diperlukan untuk mengisih nombor dalam tertib menaik). Nomborofinversi adalah2.Versi Pertama:(1,5,4,6,20)Penukaran Kedua:(1,4,5,6,20)gabungan algoritma

Bagaimana untuk melaksanakan pengisihan gabungan dalam php Bagaimana untuk melaksanakan pengisihan gabungan dalam php Oct 21, 2022 am 09:30 AM

Cara melaksanakan pengisihan gabungan dalam PHP: 1. Cipta fail contoh PHP 2. Tentukan kaedah "pengendali fungsi awam(){...}" 3. Gunakan "fungsi peribadi mergeSort($a, $lo, $hi )" {...}" kaedah untuk menguraikan data secara beransur-ansur 4. Gunakan kaedah "cantum" untuk mengisih data yang terurai dan kemudian menggabungkannya bersama-sama.

Penjelasan terperinci tentang algoritma isihan gabungan dalam PHP Penjelasan terperinci tentang algoritma isihan gabungan dalam PHP Jul 08, 2023 pm 05:03 PM

Penjelasan terperinci tentang algoritma isihan gabungan dalam PHP Pengenalan: Isih ialah salah satu masalah asas yang biasa dalam sains komputer Susunan data yang teratur boleh meningkatkan kecekapan operasi cari semula, carian dan pengubahsuaian. Antara algoritma pengisihan, isihan gabungan ialah algoritma yang sangat cekap dan stabil. Artikel ini akan memperkenalkan algoritma isihan gabungan dalam PHP secara terperinci, dengan contoh kod. Prinsip Merge Sort Merge sort ialah algoritma bahagi-dan-takluk yang membahagikan tatasusunan untuk diisih kepada dua sub-tatasusunan, melaksanakan isihan cantum masing-masing pada dua sub-tatasusunan, dan kemudian menggabungkan sub-tatasusunan yang diisih menjadi satu

Bagaimana untuk melaksanakan algoritma pengisihan gabungan dalam C# Bagaimana untuk melaksanakan algoritma pengisihan gabungan dalam C# Sep 19, 2023 am 09:45 AM

Cara melaksanakan algoritma pengisihan gabungan dalam isihan C# Merge ialah algoritma pengisihan klasik berdasarkan idea bahagi-dan-takluk Ia menyelesaikan pengisihan dengan membahagikan masalah besar kepada berbilang masalah kecil, kemudian secara beransur-ansur menyelesaikan masalah kecil dan menggabungkan hasilnya. Berikut akan memperkenalkan cara melaksanakan algoritma isihan gabungan dalam C# dan memberikan contoh kod khusus. Idea asas pengisihan gabungan adalah untuk membahagikan urutan untuk diisih kepada berbilang urutan, mengisihnya secara berasingan, dan kemudian menggabungkan urutan yang diisih ke dalam urutan yang tersusun. Kunci kepada algoritma ini adalah untuk melaksanakan operasi pemisahan dan penggabungan bagi urutan.

Tukar program C/C++ kepada kod prapemproses Tukar program C/C++ kepada kod prapemproses Sep 11, 2023 pm 04:21 PM

Di sini kita akan melihat cara untuk menjana kod prapemprosesan atau prapemproses daripada kod sumber program C atau C++. Untuk melihat kod praproses menggunakan pengkompil g++ kita perlu menggunakan pilihan '-E' dengan g++. Prapemproses mengandungi semua # arahan dalam kod dan juga memanjangkan fungsi MACRO. Sintaks g++-Eprogram.cpp contoh#define PI 3.1415int main() { float a = PI,&nb

Bagaimana untuk melaksanakan algoritma pengisihan gabungan menggunakan java Bagaimana untuk melaksanakan algoritma pengisihan gabungan menggunakan java Sep 19, 2023 am 11:33 AM

Cara menggunakan Java untuk melaksanakan algoritma pengisihan gabungan Pengenalan: Isih gabungan ialah algoritma pengisihan klasik berdasarkan kaedah bahagi dan takluk Ideanya adalah untuk membahagikan tatasusunan untuk diisih ke dalam sub-tatasusunan lapisan demi lapisan, dan kemudian menggabungkannya. sub-tatasusunan dalam urutan melalui operasi cantumkan ke dalam tatasusunan keseluruhan yang diisih. Dalam artikel ini, kami akan memperkenalkan secara terperinci cara melaksanakan algoritma isihan gabungan menggunakan Java dan memberikan contoh kod khusus. Langkah-langkah algoritma: Algoritma isihan gabungan terutamanya merangkumi tiga langkah: pemisahan, penggabungan dan pengisihan. Split: Pertama, kita perlukan

Bagaimana untuk menggunakan kaedah bahagi dan takluk untuk melaksanakan algoritma isihan gabungan dalam PHP dan meningkatkan kecekapan pengisihan? Bagaimana untuk menggunakan kaedah bahagi dan takluk untuk melaksanakan algoritma isihan gabungan dalam PHP dan meningkatkan kecekapan pengisihan? Sep 19, 2023 pm 02:10 PM

Bagaimana untuk menggunakan kaedah bahagi dan takluk untuk melaksanakan algoritma isihan gabungan dalam PHP dan meningkatkan kecekapan pengisihan? Merge sort ialah algoritma pengisihan yang cekap Ia menggunakan idea kaedah bahagi dan takluk untuk membahagikan tatasusunan untuk diisih kepada dua bahagian, masing-masing mengisih dua sub-tatasusunan, dan kemudian menggabungkan dua sub-tatasusunan menjadi satu. susunan tersusun. Isih gabungan boleh mengubah tatasusunan yang tidak diisih menjadi tatasusunan tertib secara stabil dengan memecahkan masalah secara berterusan kepada sub-masalah yang lebih kecil dan menggabungkan penyelesaian kepada sub-masalah tersebut. Dalam PHP, laksanakan algoritma pengisihan gabungan dan tingkatkan kecekapan pengisihan

See all articles