1646179680
挿入ソートは、ソートされていない配列からアイテムのソートされた配列を一度に1つずつ作成するソートアルゴリズムです。
この記事では、アルゴリズムがどのように機能し、それをコードに適用するかを説明します。
数字の配列を考えてみましょう:7、3、10、4、1、11。これらの数字は、任意の順序(昇順または降順)でソート/編成されていません。挿入ソートアルゴリズムを使用すると、最小数から最大数までそれらをソートできます。
元の配列は、ソートされた配列とソートされていない配列の2つに分割されます。次に、並べ替えられていない配列から番号を選択し、適切な場所に配置します。
When a number is picked from the unsorted array, we begin sorting from the rear part of the sorted array. If the number picked is less than the last number in the sorted array, the last number will be moved to the right and the selected number will takes its position. The iteration continues until the selected number gets to a position where the next number to be compared with is not greater than it.
This might seem like a lot of information, but you will understand better with an example:
This is our array of numbers: 7, 3, 10, 4, 1, 11
We will split this array into two – the sorted array and the unsorted array. Like this:
By default, we are putting the first number in the sorted section because we will start our comparison with it.
So, how do we sort this array?
ソートされていない配列の最初の番号は3なので、選択された番号になります。3を並べ替えられた配列に移動すると、その数は7になります。7は3より大きいため、右に移動され、次に3がその位置になります。
配列は次のようになります。
10の場合、後方からソートされた配列との比較を開始し、後方からの最初の数値は7です。7は10未満であるため、位置をシフトする必要はなく、10は7の直後に留まります。
次に、両側の数字の現在の位置を見てみましょう。
これらの数値がソートされた領域上を移動するときに、これらの数値がどのように位置を変更するかについて、少し混乱するかもしれません。次の例でそれを示しましょう。
次にソートされる番号は4です。
ソートされた配列は、現時点では次のようになります:3、7、10。
現在、並べ替えられる現在の数は4です。したがって、後ろから始めて、4と10を比較します。10は4より大きいため、1スペース右に移動し、4つの空のスペースを作成します。このようなもの:3、7、?、10。
疑問符は作成されたスペースです。しかし、まだ4を挿入することはできません。次の数値である7と比較する必要があります。7は4より大きいため、別のスペースが作成され、配列は3、?、7、10のようになります。
次の数値は3です。比較される数値が、ソートされていない配列から選択した現在の数値よりも少なくなるようになりました。3は4未満なので、最後に作成されたスペースに4が挿入されます。ソートされた配列は次のようになります:3、4、7、10。
1の場合、最後の例を理解していれば、簡単に解決できるはずです。最後の2つの数字を自分で並べ替えて挿入してみてください。
注意として、ソートされていない配列の現在の数値が、ソートされた配列で比較されている数値よりも小さい場合、ソートされた配列の数値は右に移動し、前の位置に空のスペースを作成して、現在の番号。
これは、現在の数値が比較対象の数値よりも大きい位置に到達するまで続きます。この時点で、最後に作成されたスペースに現在の番号を挿入します。
完了すると、配列は次のようになります:1、3、4、7、10、11。
いくつかのコード例を見てみましょう!
これをコードで実行したい場合は、次のようになります。
public class InsertionSort {
void sortArray(int arr[])
{
int n = arr.length;
for (int i = 1; i < n; i++) {
int current = arr[i];
int j = i - 1;
while (j >= 0 && arr[j] > current) {
arr[j + 1] = arr[j];
j = j - 1;
}
arr[j + 1] = current;
}
}
static void printArray(int arr[])
{
int n = arr.length;
for (int i = 0; i < n; i++)
System.out.print(arr[i] + " ");
System.out.println();
}
public static void main(String args[])
{
int arr[] = { 7, 3, 10, 4, 1, 11 };
InsertionSort arrayOfNumbers = new InsertionSort();
arrayOfNumbers.sortArray(arr);
printArray(arr);
// prints 1 3 4 7 10 11
}
}
コードを分解してみましょう。
void sortArray(int arr[])
{
int n = arr.length;
for (int i = 1; i < n; i++) {
int current = arr[i];
int j = i - 1;
while (j >= 0 && arr[j] > current) {
arr[j + 1] = arr[j];
j = j - 1;
}
arr[j + 1] = current;
}
}
上記では、配列をソートするための関数を作成しました。引数として配列データ型を取ります。次に、配列の長さを。という変数に格納しましたn
。
私たちのループでは、変数が1であることに気付くかもしれi
ません。ループではそれを0として見ることに慣れているかもしれません。配列の2番目の値から並べ替えを開始しているため、ここでは1です。
current
変数は、ソートされている現在の値です。は、値を減らすことによって変数j
の位置を左にシフトするために使用されます。current
current
次のwhileループは、提供された条件を通じて変数の位置の減少を停止するタイミングを確認するのに役立ちます。
これらの条件が満たされると、現在の値が適切な場所に挿入されます。これは、前のセクションで見た例と同じです。
static void printArray(int arr[])
{
int n = arr.length;
for (int i = 0; i < n; i++)
System.out.print(arr[i] + " ");
System.out.println();
}
上記のコードは、配列の値を出力するための関数にすぎません。
public static void main(String args[])
{
int arr[] = { 7, 3, 10, 4, 1, 11 };
InsertionSort arrayOfNumbers = new InsertionSort();
arrayOfNumbers.sortArray(arr);
printArray(arr);
// prints 1 3 4 7 10 11
}
これで配列の並べ替えに使用し、作成済みの関数を使用して値を出力しました。
#include <bits/stdc++.h>
using namespace std;
void insertionSort(int arr[], int n)
{
int i, current, j;
for (i = 1; i < n; i++)
{
current = arr[i];
j = i - 1;
while (j >= 0 && arr[j] > current)
{
arr[j + 1] = arr[j];
j = j - 1;
}
arr[j + 1] = current;
}
}
void printArray(int arr[], int n)
{
int i;
for (i = 0; i < n; i++)
cout << arr[i] << " ";
cout << endl;
}
int main()
{
int arrayOfNumbers[] = { 7, 3, 10, 4, 1, 11 };
int n = sizeof(arrayOfNumbers) / sizeof(arrayOfNumbers[0]);
insertionSort(arrayOfNumbers, n);
printArray(arrayOfNumbers, n); // 1 3 4 7 10 11
return 0;
}
このコードは、前のセクションで使用したものと同じです。唯一の違いは、このセクションでC ++を使用して記述したことです。したがって、前のセクションで説明した説明を見て、理解を深めることができます。
この記事では、挿入ソートアルゴリズムがいくつかの例でどのように機能するか、そしてそれをJavaおよびC ++コードに適用する方法を学びました。
ハッピーコーディング!
1646179680
挿入ソートは、ソートされていない配列からアイテムのソートされた配列を一度に1つずつ作成するソートアルゴリズムです。
この記事では、アルゴリズムがどのように機能し、それをコードに適用するかを説明します。
数字の配列を考えてみましょう:7、3、10、4、1、11。これらの数字は、任意の順序(昇順または降順)でソート/編成されていません。挿入ソートアルゴリズムを使用すると、最小数から最大数までそれらをソートできます。
元の配列は、ソートされた配列とソートされていない配列の2つに分割されます。次に、並べ替えられていない配列から番号を選択し、適切な場所に配置します。
When a number is picked from the unsorted array, we begin sorting from the rear part of the sorted array. If the number picked is less than the last number in the sorted array, the last number will be moved to the right and the selected number will takes its position. The iteration continues until the selected number gets to a position where the next number to be compared with is not greater than it.
This might seem like a lot of information, but you will understand better with an example:
This is our array of numbers: 7, 3, 10, 4, 1, 11
We will split this array into two – the sorted array and the unsorted array. Like this:
By default, we are putting the first number in the sorted section because we will start our comparison with it.
So, how do we sort this array?
ソートされていない配列の最初の番号は3なので、選択された番号になります。3を並べ替えられた配列に移動すると、その数は7になります。7は3より大きいため、右に移動され、次に3がその位置になります。
配列は次のようになります。
10の場合、後方からソートされた配列との比較を開始し、後方からの最初の数値は7です。7は10未満であるため、位置をシフトする必要はなく、10は7の直後に留まります。
次に、両側の数字の現在の位置を見てみましょう。
これらの数値がソートされた領域上を移動するときに、これらの数値がどのように位置を変更するかについて、少し混乱するかもしれません。次の例でそれを示しましょう。
次にソートされる番号は4です。
ソートされた配列は、現時点では次のようになります:3、7、10。
現在、並べ替えられる現在の数は4です。したがって、後ろから始めて、4と10を比較します。10は4より大きいため、1スペース右に移動し、4つの空のスペースを作成します。このようなもの:3、7、?、10。
疑問符は作成されたスペースです。しかし、まだ4を挿入することはできません。次の数値である7と比較する必要があります。7は4より大きいため、別のスペースが作成され、配列は3、?、7、10のようになります。
次の数値は3です。比較される数値が、ソートされていない配列から選択した現在の数値よりも少なくなるようになりました。3は4未満なので、最後に作成されたスペースに4が挿入されます。ソートされた配列は次のようになります:3、4、7、10。
1の場合、最後の例を理解していれば、簡単に解決できるはずです。最後の2つの数字を自分で並べ替えて挿入してみてください。
注意として、ソートされていない配列の現在の数値が、ソートされた配列で比較されている数値よりも小さい場合、ソートされた配列の数値は右に移動し、前の位置に空のスペースを作成して、現在の番号。
これは、現在の数値が比較対象の数値よりも大きい位置に到達するまで続きます。この時点で、最後に作成されたスペースに現在の番号を挿入します。
完了すると、配列は次のようになります:1、3、4、7、10、11。
いくつかのコード例を見てみましょう!
これをコードで実行したい場合は、次のようになります。
public class InsertionSort {
void sortArray(int arr[])
{
int n = arr.length;
for (int i = 1; i < n; i++) {
int current = arr[i];
int j = i - 1;
while (j >= 0 && arr[j] > current) {
arr[j + 1] = arr[j];
j = j - 1;
}
arr[j + 1] = current;
}
}
static void printArray(int arr[])
{
int n = arr.length;
for (int i = 0; i < n; i++)
System.out.print(arr[i] + " ");
System.out.println();
}
public static void main(String args[])
{
int arr[] = { 7, 3, 10, 4, 1, 11 };
InsertionSort arrayOfNumbers = new InsertionSort();
arrayOfNumbers.sortArray(arr);
printArray(arr);
// prints 1 3 4 7 10 11
}
}
コードを分解してみましょう。
void sortArray(int arr[])
{
int n = arr.length;
for (int i = 1; i < n; i++) {
int current = arr[i];
int j = i - 1;
while (j >= 0 && arr[j] > current) {
arr[j + 1] = arr[j];
j = j - 1;
}
arr[j + 1] = current;
}
}
上記では、配列をソートするための関数を作成しました。引数として配列データ型を取ります。次に、配列の長さを。という変数に格納しましたn
。
私たちのループでは、変数が1であることに気付くかもしれi
ません。ループではそれを0として見ることに慣れているかもしれません。配列の2番目の値から並べ替えを開始しているため、ここでは1です。
current
変数は、ソートされている現在の値です。は、値を減らすことによって変数j
の位置を左にシフトするために使用されます。current
current
次のwhileループは、提供された条件を通じて変数の位置の減少を停止するタイミングを確認するのに役立ちます。
これらの条件が満たされると、現在の値が適切な場所に挿入されます。これは、前のセクションで見た例と同じです。
static void printArray(int arr[])
{
int n = arr.length;
for (int i = 0; i < n; i++)
System.out.print(arr[i] + " ");
System.out.println();
}
上記のコードは、配列の値を出力するための関数にすぎません。
public static void main(String args[])
{
int arr[] = { 7, 3, 10, 4, 1, 11 };
InsertionSort arrayOfNumbers = new InsertionSort();
arrayOfNumbers.sortArray(arr);
printArray(arr);
// prints 1 3 4 7 10 11
}
これで配列の並べ替えに使用し、作成済みの関数を使用して値を出力しました。
#include <bits/stdc++.h>
using namespace std;
void insertionSort(int arr[], int n)
{
int i, current, j;
for (i = 1; i < n; i++)
{
current = arr[i];
j = i - 1;
while (j >= 0 && arr[j] > current)
{
arr[j + 1] = arr[j];
j = j - 1;
}
arr[j + 1] = current;
}
}
void printArray(int arr[], int n)
{
int i;
for (i = 0; i < n; i++)
cout << arr[i] << " ";
cout << endl;
}
int main()
{
int arrayOfNumbers[] = { 7, 3, 10, 4, 1, 11 };
int n = sizeof(arrayOfNumbers) / sizeof(arrayOfNumbers[0]);
insertionSort(arrayOfNumbers, n);
printArray(arrayOfNumbers, n); // 1 3 4 7 10 11
return 0;
}
このコードは、前のセクションで使用したものと同じです。唯一の違いは、このセクションでC ++を使用して記述したことです。したがって、前のセクションで説明した説明を見て、理解を深めることができます。
この記事では、挿入ソートアルゴリズムがいくつかの例でどのように機能するか、そしてそれをJavaおよびC ++コードに適用する方法を学びました。
ハッピーコーディング!