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

นับจำนวนขั้นต่ำของการย้าย "ย้ายไปด้านหน้า" เพื่อจัดเรียงอาร์เรย์ใน C ++


เราได้รับอาร์เรย์ของตัวเลขระหว่าง 1 ถึง n เป้าหมายที่นี่คือการค้นหาหมายเลข ของการดำเนินการ 'moveto front' ที่จำเป็นในการจัดเรียงอาร์เรย์ที่กำหนด อาร์เรย์ไม่มีการซ้ำซ้อน การดำเนินการ "ย้ายไปด้านหน้า" จะเลือกองค์ประกอบและวางไว้ที่ตำแหน่งแรก ที่นี่ที่ดัชนี 0

เราจะสำรวจอาร์เรย์จากจุดสิ้นสุด หากองค์ประกอบอยู่ในตำแหน่งที่ถูกต้อง ก็ไม่จำเป็นต้องย้ายอย่างอื่น สำหรับองค์ประกอบตั้งแต่ 1 ถึง n ตำแหน่งที่ถูกต้องในอาร์เรย์ขององค์ประกอบ arr[i] ควรอยู่เหนือดัชนี i+1 arr[0] ควรเป็น 1, arr[1] ควรเป็น 2 และ…….arr[n-1] ควรเป็น n.

อินพุต

Arr[]= { 4,3,2,1 }

ผลลัพธ์

Minimum move-to-front operations: 3

คำอธิบาย

Pull 3, 3,4,2,1 count=1
Pull 2, 2,3,4,1 count=2
Pull 1, 1,2,3,4 count=3

อินพุต

Arr[]= { 6,1,2,5,4,3 }

ผลลัพธ์

Minimum move-to-front operations: 5

คำอธิบาย

Pull 5, 5,6,1,2,4,3 count=1
Pull 4, 4,5,6,1,2,3 count=2
Pull 3, ,4,5,6,1,2 count=3
Pull 2, 2,3,4,5,6,1 count=4
Pull 1, 1,2,3,4,5,6 count=5

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

  • Integer array Arr[] เก็บตัวเลข 1 ถึง n

  • ขนาดตัวแปรจำนวนเต็มเก็บความยาวของอาร์เรย์ Arr[]

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

  • ตัวแปร Count เริ่มต้นด้วยขนาดของอาร์เรย์ เนื่องจากองค์ประกอบทั้งหมดสามารถย้ายได้ในกรณีที่อาร์เรย์ลำดับลดลง

  • เริ่มสำรวจจากดัชนีสุดท้ายและเคลื่อนไปทางด้านหน้า หากค่าองค์ประกอบเหมือนกับการนับ (สำหรับองค์ประกอบที่เรียงลำดับระหว่าง 1 ถึง n n คือค่าสุดท้าย n-1 จะเป็นลำดับที่สองและต่อไปเรื่อยๆ) จากนั้นให้ลดจำนวนลงตามองค์ประกอบนั้น ในตำแหน่งที่ถูกต้อง

  • ด้วยวิธีนี้เมื่อสิ้นสุดการวนซ้ำ การนับ ได้ผลลัพธ์ที่ต้องการ

ตัวอย่าง

#include <bits/stdc++.h>
using namespace std;
// Calculate minimum number of moves to arrange array
// in increasing order.
int movetoFront(int arr[], int n){
   //take count as all elements are correctly placed
   int count = n;
   // Traverse array from end
   for (int i=n-1; i >= 0; i--){
      // If current item is at its correct position,
         //decrement the count
      //range is 1 to n so every arr[i] should have value i+1
      //1 at 0 index, 2 at 1 index........
      if (arr[i] == count)
         count--;
   }
   return count;
}
int main(){
   int Arr[] = {5, 3, 4, 7, 2, 6, 1};
   int size = 7;
   cout <<"Minimum 'move-to-front' to sort array:"<< movetoFront(Arr, size);
   return 0;
}

ผลลัพธ์

Minimum 'move-to-front' to sort array:6