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

โปรแกรม C++ หาองค์ประกอบที่เล็กที่สุดลำดับที่ k โดยวิธีการแบ่งพาร์ติชันอาร์เรย์


เราจะพัฒนาโปรแกรม C++ เพื่อหาองค์ประกอบที่เล็กที่สุดลำดับที่ k (kth smallest element) โดยวิธีการแบ่งพาร์ติชันอาร์เรย์ (Partitioning the Array)

อัลกอริทึม

Begin   ฟังก์ชัน CreatePartition() มีอาร์กิวเมนต์เป็นอาร์เรย์ a, และขอบเขตล่าง l และขอบเขตบน h     in := l และ pi := h     สำหรับ i ในช่วง l ถึง h ทำ       ถ้า a[i] < a[pi] แล้ว         สลับค่าของ a[i] และ a[in]         เพิ่ม in ขึ้น 1       เสร็จสิ้น       สลับค่าของ a[pi] และ a[in]     คืนค่า in End Begin   ฟังก์ชัน Partition():     อาร์กิวเมนต์:       อาร์เรย์ A, และขอบเขตล่างและบน low และ high, และ k     ตัวฟังก์ชัน:       ถ้า low < high แล้ว         p_in := Create_Partition(A, low, high)         ถ้า p_in = k-1 แล้ว           คืนค่า k-1         ถ้าไม่ ถ้า p_in > k-1           Partition (A, low, p_in – 1, k)         ถ้าไม่           Partition (A, p_in + 1, high, k) End

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

#include<iostream> using namespace std; void swap(int *a, int *b) {   int t;   t = *a;   *a = *b;   *b = t; } int CreatePartition(int a[], int l, int h) {   int pi, in, i;   in = l;   pi = h;   for(i=l; i < h; i++) {     if(a[i] < a[pi]) {       swap(&a[i], &a[in]);       in++;     }   }   swap(&a[pi], &a[in]);   return in; } int Partition(int a[], int low, int high, int k) {   int p_in;   if(low < high) {     p_in = CreatePartition(a, low, high);     if(p_in == k-1)       return k-1;     else if(p_in > k-1)       Partition(a, low, p_in-1, k);     else       Partition(a, p_in+1, high, k);   } } int main() {   int n, i, k, k_k;   cout<<"\nEnter the number array elements: ";   cin>>n;   int a[n];   for(i = 0; i < n; i++) {     cout<<"Enter element "<<i+1<<": ";     cin>>a[i];   }   cout<<"\nEnter the k for the kth smallest element: ";   cin>>k;   k_k = Partition(a, 0, n-1, k);   cout<<"\nThe kth smallest element: "<<a[k_k];   return 0; }

ผลลัพธ์

Enter the number array elements: 4 Enter element 1: 3 Enter element 2: 2 Enter element 3: 5 Enter element 4: 4 Enter the k for the kth smallest element: 3 The kth smallest element: 4