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

C++でソートされた配列


ここでは、ソートされた配列のいくつかの基本的な概念を見ていきます。配列は同種のデータ構造であり、いくつかの連続するメモリ位置に同じ種類のデータを保持します。時々、それらを使用するために要素をソートする必要があります。それ以外に、ソートされた配列を作成できます。それは常にソートされます。

この場合、ソートされた配列に挿入および削除するためのアルゴリズムが表示されます。その中に要素を挿入すると、自動的にソートされた位置に配置されます。したがって、挿入後に再度ソートする必要はありません。削除すると、要素が削除され、右の要素をシフトして空のスペースが埋められます。ソートされた配列を使用しているため、削除する前に要素を見つけるために二分探索アルゴリズムを使用します。

アルゴリズム

insertSorted(arr, n, key):
Begin
   if n >= max size of the array, then return
   otherwise i := n – 1
   while i >= 0 and arr[i] > key, do
      arr[i + 1] := arr[i]
      i := i - 1
   done
   arr[i + 1] := key
   n := n + 1
End
deleteSorted(arr, n, key):
Begin
   pos := search key into arr
   if pos is -1, then item is not found, and return
   otherwise i := pos
   while i < n – 1, do
      arr[i] := arr[i + 1]
      i := i + 1
   done
   n := n + 1
End

#include <iostream>
#define MAX 10
using namespace std;
void display(int arr[], int n){
   for(int i = 0; i <n; i++){
      cout << arr[i] << " ";
   }
   cout << endl;
}
int search(int arr[], int low, int high, int key){
   if (high < low)
      return -1;
   int mid = (low + high) / 2; /*low + (high - low)/2;*/
   if (key == arr[mid])
      return mid;
   if (key > arr[mid])
      return search(arr, (mid + 1), high, key);
   return search(arr, low, (mid - 1), key);
}
void insertSorted(int arr[], int &n, int key){
   if (n >= MAX){
      cout << "No place to insert";
      return;
   }
   int i;
   for (i = n - 1; (i >= 0 && arr[i] > key); i--)
      arr[i + 1] = arr[i];
   arr[i + 1] = key;
   n = n + 1;
}
void deleteSorted(int arr[], int &n, int key){
   int key_pos = search(arr, 0, n, key);
   if(key_pos == -1){
      cout << "Element is not present." << endl;
      return;
   }
   int i;
   for (i = key_pos; i < n - 1; i++)
      arr[i] = arr[i + 1];
   n = n - 1;
}
int main() {
   int arr[MAX];
   int n = 0;
   insertSorted(arr, n, 10);
   insertSorted(arr, n, 20);
   insertSorted(arr, n, 30);
   insertSorted(arr, n, 40);
   insertSorted(arr, n, 50);
   insertSorted(arr, n, 60);
   insertSorted(arr, n, 70);
   display(arr, n);
   deleteSorted(arr, n, 35);
   deleteSorted(arr, n, 40);
   deleteSorted(arr, n, 60);
   display(arr, n);
}

出力

10 20 30 40 50 60 70
Element is not present.
10 20 30 50 70

  1. C /C++の多次元配列

    C / C ++では、多次元配列は簡単な言葉で配列の配列として定義されます。多次元配列では、データは表形式で(行の主要な順序で)格納されます。次の図は、次元が3 x 3x3の多次元配列のメモリ割り当て戦略を示しています。 アルゴリズム Begin    Declare dimension of the array.    Dynamic allocate 2D array a[][] using new.    Fill the array with the elements.    Print the ar

  2. Javaでk個のソートされた配列をマージ

    「n」個の配列が与えられます。たとえば、整数型のarr1 []、arr2 []、およびarr3[]の3つの配列を使用するとします。タスクは、結果の配列が実行時にのみソートされるように、指定されたすべての整数配列をマージすることです。 例を挙げて理解しましょう 入力 − Int a [] ={21,22,23,24}; int b [] ={28,31,35} 出力 −int result []={21,22,23,24,28,31,35}。 説明 −配列要素は、追加される前に比較され、結果の配列内の適切な位置に従って追加されます。 入力 − int a [] ={