


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).
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)
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
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
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); }
Output
Number of inversions are 2
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!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



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

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

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 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

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.

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

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? 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
