選択の位置合わせ、挿入の位置合わせ
1.ソート選択
この順序で要素を配置する位置が決定され、どの要素を配置するかを選択するアルゴリズム
1.1並べ替えプロセス
1.2コード
1.2.1 Java
void selectionSort(int[] arr) {
int indexMin, temp;
for (int i = 0; i < arr.length-1; i++) { // 1.
indexMin = i;
for (int j = i + 1; j < arr.length; j++) { // 2.
if (arr[j] < arr[indexMin]) { // 3.
indexMin = j;
}
}
// 4. swap(arr[indexMin], arr[i])
temp = arr[indexMin];
arr[indexMin] = arr[i];
arr[i] = temp;
}
System.out.println(Arrays.toString(arr));
}
1.2.2 Python
def selection_sort(a):
size = len(a)
for i in range(size):
minidx = i
for j in range(i+1,size):
if(a[minidx]>a[j]):
minidx=j
a[minidx],a[i] = a[i],a[minidx]
arr = [9,1,22,4,0,-1,1,22,100,10]
selection_sort( arr )
print( arr )
# [-1, 0, 1, 1, 4, 9, 10, 22, 22, 100]
1.3複雑度
1.3.1時間の複雑さ
n個のデータがある場合、
1回目の回転の比較回数:1~(n-1)=>n-1
2回目の回転の比較回数:2~(n-1)=>n-2
...
(n-1) + (n-2) + .... + 2 + 1 => n(n-1)/2
1.3.2空間複雑度
与えられた配列では,交換(swap)により並べ替えられ,O(n)となる.
1.4メリットとデメリット
長所
Bubble sortと同様にアルゴリズムは非常に簡単です
Bubble Sortと同様に、ソートする配列で交換され、他のメモリ領域は必要ありません.
=>その場でソート
短所
2.整列挿入
すべての要素を並べ替えられた配列部分と順番に比較し、それらの位置を検索して挿入することによって並べ替えを完了するアルゴリズム.
2.1並べ替えプロセス
2.2コード
2.2.1 Java
void insertionSort(int[] arr)
{
for(int index = 1 ; index < arr.length ; index++){ // 1.
int temp = arr[index];
int prev = index - 1;
while( (prev >= 0) && (arr[prev] > temp) ) { // 2.
arr[prev+1] = arr[prev];
prev--;
}
arr[prev + 1] = temp; // 3.
}
System.out.println(Arrays.toString(arr));
}
2.2.2 Python
def insertion_sort(arr):
for i in range(1, len(arr)) :
j = i-1
temp = arr[i]
while j>=0 and arr[j]>temp :
arr[j+1] = arr[j]
j-=1
arr[j+1] = temp
arr = [9,1,22,4,0,-1,1,22,100,10]
insertion_sort(arr)
print( arr )
# [-1, 0, 1, 1, 4, 9, 10, 22, 22, 100]
2.3複雑度
2.3.1時間複雑度
最悪の場合
最良の場合
2.3.2空間複雑度
与えられた配列では,交換(swap)により並べ替えられ,O(n)となる.
2.4メリットとデメリット
長所
ほとんどの要素が整列されている場合、非常に効率的です.
ソートする配列でスワップする方法なので、他のメモリ領域は必要ありません.=>その場でソート
安定した順序付け.
ソートや泡ソートなどのO(n^2)を選択しますが、比較的速いです.
k+1個の要素を配置するのに必要な任意の数の要素のみを参照するため、ソートを挿入する方が効率的です.
ソートを選択するには、k+1要素を検索するために残りのすべての要素をナビゲートする必要があります.
短所
Reference
この問題について(選択の位置合わせ、挿入の位置合わせ), 我々は、より多くの情報をここで見つけました https://velog.io/@swhan9404/선택정렬-삽입정렬テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol