実装 1: (for ループを使用しますが、while ループでシフトします)
public class Insertionsort{
public static void main(String[] args) {
int a[] = {10,9,8,7,6,5,4,3,2,1};
for (int i = 1; i < a.length; i++){
int j = i;
int B = a[i];
while ((j > 0) && (a[j-1] > B)){
a[j] = a[j-1];
j--;
}
a[j] = B;
}
for(int i = 0; i <a.length; i++)
System.out.print(a[i]+" ");
}
}
実装 2: 3 つの for ループを使用
public class InsertionSort {
public static void main(String[] args) {
int a[] = {10,9,8,7,6,5,4,3,2,1};
for(int i = 0; i<a.length; i++){
for(int j=i+1; j<a.length; j++){
if(a[i]>a[j]){
int temp = a[j];
for (int k=j; k>i; k--){
a[k] = a[k-1];
}
a[i] = temp;
}
}
System.out.print(a[i]+" ");
}
}
}
最も内側のループの反復回数は間違いなく少ないですが、両方のアルゴリズムがまったく同じか、最初のアルゴリズムの方が優れているかはわかりません。判断にお役立てください。