Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

โปรแกรม C++ หาค่ามัธยฐานของอาร์เรย์ที่จัดเรียงแล้วสองอาร์เรย์ โดยใช้วิธีการค้นหาแบบทวิภาค


เราจะพัฒนาโปรแกรม C++ เพื่อหาค่ามัธยฐาน (median) ของอาร์เรย์ที่จัดเรียงแล้วสองอาร์เรย์ โดยใช้วิธีการค้นหาแบบทวิภาค (Binary Search approach)

อัลกอริทึม

Begin   ฟังก์ชัน median() กับอาร์เรย์ทั้งสองและดัชนีเริ่มต้นและสิ้นสุดของแต่ละอาร์เรย์ ซึ่งมีสองอาร์เรย์และองค์ประกอบของพวกเขาเป็นอาร์กิวเมนต์     A) คำนวณความยาวอาร์เรย์เป็น e1 - s1 โดยที่ e1 และ s1 เป็นดัชนีสิ้นสุดและเริ่มต้น     B) ถ้าความยาวเป็น 2 หรือ 1 ให้คำนวณค่ามัธยฐานของอาร์เรย์ตามความยาวคู่หรือคี่ พิมพ์ผลลัพธ์     C) ตรวจสอบว่าค่ามัธยฐานแต่ละอันเท่ากันหรือไม่ ถ้าใช่ ให้พิมพ์ผลลัพธ์     D) ถ้าเงื่อนไขข้างต้นสองอย่างเป็นจริง ตรวจสอบว่า m > m2 แล้วค่ามัธยฐานรวมจะอยู่ในครึ่งแรกของอาร์เรย์แรก หรือครึ่งหลังของอาร์เรย์ที่สอง     E) ถ้า m1 < m2 ค่ามัธยฐานรวมจะอยู่ในครึ่งหลังของอาร์เรย์แรก หรือครึ่งแรกของอาร์เรย์ที่สอง     F) เรียก median() แบบรีคอร์ซีฟ (recursively) พร้อมดัชนีเริ่มต้นและสิ้นสุดที่อัปเดตแล้ว End

ตัวอย่างโค้ด

#include<iostream> using namespace std; void median(float a1[], int s1, int e1, float a2[], int s2, int e2) {   float m1, m2;   if((e1-s1+1)%2 == 0) {     if(e1-s1 == 1) {       m1 = ((a1[s1]<a2[s2]?a1[s1]:a2[s2])+(a1[e1]>a2[e2]?a1[e1]:a2[e2]))/2;       cout<<m1;       return;     }     m1 = (a1[(e1+s1)/2]+a1[(e1+s1)/2+1])/2;     m2 = (a2[(e2+s2)/2]+a2[(e2+s2)/2+1])/2;     if(m1 == m2 ) {       cout<<m1;       return;     }     else {       if(m1 > m2)         median(a1, s1, (e1+s1)/2+1, a2, (e2+s2)/2, e2);       else         median(a1, (e1+s1)/2, e1, a2, s2, (e2+s2)/2+1);     }   } else {     if(e1-s1 == 0) {       m1 = (a1[s1]+a2[s2])/2;       cout<<m1;       return;     }     m1 = a1[(e1+s1)/2];     m2 = a2[(e2+s2)/2];     if(m1 == m2 ) {       cout<<m1;       return;     }     else {       if(m1 > m2)         median(a1, s1, (e1+s1)/2, a2, (e2+s2)/2, e2);       else         median(a1, (e1+s1)/2, e1, a2, s2, (e2+s2)/2);     }   }   return; } int main() {   int n1,n2,i;   cout<<"\nEnter the number of elements for 1st array: ";   cin>>n1;   float a1[n1];   for(i = 0; i < n1; i++) {     cout<<"Enter element for 1st array"<<i+1<<": ";     cin>>a1[i];   }   cout<<"\nEnter the number of elements for 2nd array: ";   cin>>n2;   float a2[n2];   for(i = 0; i < n2; i++) {     cout<<"Enter element for 2nd array "<<i+1<<": ";     cin>>a1[i];   }   cout << "Median is ";   median(a1, 0, n1-1, a2, 0, n2-1) ;   return 0; }

ผลลัพธ์

Enter the number of elements for 1st array: 5 Enter element for 1st array1: 6 Enter element for 1st array2: 7 Enter element for 1st array3: 9 Enter element for 1st array4: 10 Enter element for 1st array5: 11 Enter the number of elements for 2nd array: 5 Enter element for 2nd array 1: 60 Enter element for 2nd array 2: 70 Enter element for 2nd array 3: 90 Enter element for 2nd array 4: 100 Enter element for 2nd array 5: 110 Median is 35