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

การนับข้ามเส้นในอาร์เรย์ใน C++


เราได้รับอาร์เรย์ขององค์ประกอบที่แตกต่างกันซึ่งไม่มีการจัดเรียง เป้าหมายคือการหาเส้นตัดหลังจากจัดเรียงอาร์เรย์แล้ว ข้ามเส้นจะถูกนับดังแสดงด้านล่าง -

  • Arr[]={ 1,2,4,3,5 } มีกากบาท 3 เส้นดังแสดงด้านล่าง

การนับข้ามเส้นในอาร์เรย์ใน C++

  • อา[]={ 1,2,3,4,5 } ไม่มีกากบาทเนื่องจากมีการจัดเรียงอาร์เรย์แล้ว

เราจะนับกากบาทโดยใช้การเรียงลำดับการแทรกซึ่งองค์ประกอบจากด้านขวาจะถูกเพิ่มไปยังองค์ประกอบที่จัดเรียงทางด้านซ้าย ทุกครั้งที่มีการเพิ่มองค์ประกอบในส่วนที่จัดเรียง การเพิ่มขึ้นจะนับเมื่อเคลื่อนไปยังตำแหน่งที่ถูกต้อง มันจะผ่านไปโดยข้ามองค์ประกอบทั้งหมดที่ยิ่งใหญ่กว่า

มาทำความเข้าใจกับตัวอย่างกัน

ป้อนข้อมูล − arr[]={4,3,1,2 }

ผลผลิต − นับกากบาทในอาร์เรย์ − 5

คำอธิบาย − สาย 4-4 และ 3-3 ข้ามเส้น 1-1 และ 2-2 ข้ามเส้นทั้งหมด 4 เส้น

ทั้ง 4-4 และ 3-3 ไขว้กันครั้งเดียว รวม 4+1=5 เส้นตัด

ป้อนข้อมูล − arr[]={ 0,1,5,3 }

ผลผลิต − นับกากบาทในอาร์เรย์ − 1

คำอธิบาย − ทั้ง 5-5 และ 3-3 ไขว้กันครั้งเดียว รวม 1 ข้ามเส้น

แนวทางที่ใช้ในโปรแกรมด้านล่างมีดังนี้

  • เราใช้อาร์เรย์จำนวนเต็ม arr[] ที่เริ่มต้นด้วยตัวเลขที่แตกต่างกัน

  • ฟังก์ชัน insertionSort(int arr[], int n) รับอาร์เรย์และความยาวของอาร์เรย์เป็นอินพุต และหลังจากจัดเรียงแล้ว ฟังก์ชันจะคืนค่าจำนวนข้ามเส้นตามผลลัพธ์

  • ใช้จำนวนเริ่มต้นของเส้นตัดเป็น 0 ใช้ตัวแปรการนับ

  • องค์ประกอบแรกได้รับการจัดเรียงแล้ว ดังนั้นเริ่มจากองค์ประกอบที่สองจนถึงสิ้นสุด (i=1 ถึง i

  • ตอนนี้ให้เลื่อนองค์ประกอบทั้งหมดไปทางขวาหากเป็น> item และ j>0 สำหรับการเพิ่มกะแต่ละครั้งให้นับเนื่องจากสิ่งเหล่านี้ถูกข้ามด้วยรายการ

  • ที่ส่วนท้ายของ while loop ให้วางรายการไว้ที่ตำแหน่งที่ถูกต้องคือ arr[j+1].

  • ทำสิ่งนี้กับองค์ประกอบทั้งหมดและนับองค์ประกอบที่ข้าม

  • ค่าที่เพิ่มขึ้นของการนับเป็นจำนวน ข้ามเส้นได้

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
int insertionSort(int arr[], int n){
   int count=0;
   int item;
   int j;
   for (int i = 1; i < n; i++){
      item = arr[i];
      j = i - 1;
      //insert element at correct position in sorted part, no. of elements it passes
      //from right till correct position is count of cross lines.
      while (j >= 0 && arr[j] > item){
         arr[j + 1] = arr[j];
         j = j - 1;
         count++;
      }
      arr[j + 1] = item;
   }
   return count;
}
int main(){
   int arr[] = { 4,5,3,1,2};
   int n = 5;
   cout<<"Number of cross lines: "<<insertionSort(arr, n);
   return 0;
}

ผลลัพธ์

หากเราเรียกใช้โค้ดข้างต้น มันจะสร้างผลลัพธ์ต่อไปนี้ -

Number of cross lines: 8