1.選択ソート
簡単な説明は次のとおりです。最初に配列内の最小の要素を見つけて、それを配列の最初の要素と交換します。次に、残りの要素の中から最小の要素を見つけて、配列の2番目の要素と位置を交換します。以下同様に、配列全体を並べ替えます。
長さNの配列の場合、ソートを選択するには、約(N ^ 2)/ 2の比較とN回の交換が必要です。
2.挿入ソート
挿入ソート、各要素を他の順序付けられたローカル配列の適切な位置に挿入します。挿入された要素のためのスペースを確保するために、残りの要素を適切な位置に1か所移動する必要があります。
簡単に言えば、最初にインデックス値iを決定し、このiから始めて、j = iを定義し、a [j-1]> a [j]が2つを交換する場合、a [j]をa [j-1]と比較します。 、J–、a [j-1] <a [j]の場合は、正しい位置に到達したことを意味し、小さなループを終了します。それ以外の場合は、j = 0まで操作を繰り返します。小さなループが完了したら、インデックスi ++を配置します。
3.ヒルソート
簡単に言うと、最初に「挿入ソート」のスワップ間隔を1からhに変更し、ラウンドの配置後にh = h / 3に変更してから、h> = 1になるまで操作を繰り返します。
以下はコードです
import java.util.*;
public class Example {
public static void SelectSort(Comparable[] a) {
for (int i = 0; i < a.length; i++) {
int min = i;
for (int j = i+1; j < a.length; j++) {
if (less(a[j], a[min])) {
min = j;
}
}
exch(a, i, min);
}
}
public static void InsertSort(Comparable[] a) {
for (int i = 1; i < a.length; i++) {
for (int j = i; j > 0 && less(a[j], a[j-1]); j--) {
exch(a, j, j-1);
}
}
}
public static void ShellSort(Comparable[] a) {
int h = 1;
while (h < a.length/3) {
h = 3*h + 1;
}
while (h >= 1) {
for (int i = h; i < a.length; i++) {
for (int j = i; j >= h && less(a[j], a[j-h]); j-=h) {
exch(a, j, j-h);
}
}
h = h / 3;
}
}
public static boolean less(Comparable v, Comparable w) {
return v.compareTo(w) < 0;
}
private static void exch(Comparable[] a, int i, int j) {
Comparable t = a[i];
a[i] = a[j];
a[j] = t;
}
public static void show(Comparable[] a) {
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]+" ");
}
System.out.println();
}
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int n = in.nextInt();
Comparable[] arr = new Comparable[n];
for (int i = 0; i < arr.length; i++) {
arr[i] = in.nextInt();
}
SelectSort(arr);
InsertSort(arr);
ShellSort(arr);
show(arr);
}
}