C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

配列を分割する方法でk番目に小さい要素を見つけるC++プログラム


配列を分割する方法でk番目に小さい要素を見つけるC++プログラムを開発します。

アルゴリズム

Begin
   Function CreatePartition() has an array a, and the lower l and upper limit h as arguments
   in := l and pi := h
   for i in range l to h, do
      if a[i] < a[pi], then
         exchange the values of a[i] and a[in]
         increase the in by 1
      done
      exchange the values of a[pi] and a[in]
   return in
End
Begin
   Function Partition():
   Arguments:
      An array A, and the lower and upper limit low and high, and also k.
      Body of the function:
      if low < high, then
         p_in := Create_Partition(A, low, high)
         if p_in = k-1, then
            return k-1
         else if p_in > k-1
            Partition (A, low, p_in – 1, k)
         else
            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

  1. 2D配列でK番目に小さい要素を見つけるC#プログラム

    2D配列を宣言する- int[] a = new int[] {    65,    45,    32,    97,    23,    75,    59 }; K番目に小さい整数、つまり5番目に小さい整数が必要だとします。配列を最初に並べ替える- Array.Sort(a); 5番目に小さい要素を取得するには- a[k - 1]; 完全なコードを見てみましょう- 例 using System; using System.IO; using S

  2. 2D配列でk番目に小さい要素を見つけるPythonプログラム

    1つのn×nユーザー入力整数行列が与えられ、kの値。私たちのタスクは、2D配列でk番目に小さい要素を見つけることです。ここでは、Pythonでheapq mudule.Heapキュー(またはheapq)を使用します。 Pythonでは、「heapq」モジュールを使用して利用できます。 Pythonでのこのモジュールの手法は、最小のヒープ要素がポップされるたびに(min heap).nsmallest()メソッドを使用して、データフレームまたはシリーズからn個の最小値を取得します。 例 Input Array is:: 10 20 20 40 15 45 40 30 32 33 30 50