これが挿入ソートの2つのバージョンで、1つは擬似コードから、もう1つは直接実装します。どのバージョンがより多くのステップとスペースを必要とするか知りたいです(少しのスペースでも複雑です)。
void insertion_sort(int a[], int n) {
int key, i, j;
for(i = 1; i < n; i++) {
key = a[i];
j = i - 1;
while(j >= 0 && a[j] > key) {
a[j+1] = a[j];
j--;
}
a[j+1] = key;
}
}
そしてこれ
insertion_sort(item s[], int n) {
int i,j;
for (i=1; i<n; i++) {
j=i;
while ((j>0) && (s[j] < s[j-1])) {
swap(&s[j],&s[j-1]);
j = j-1;
}
}
}
これがサンプルのソート配列a={5、2、4、6、1、3}です。私の意見では、2番目のバージョンは番号を1つずつ交換するため、より多くの手順を実行しますが、1番目のバージョンはwhileループでより多くの番号を交換してから、最小の番号を交換します。例:インデックス= 3までは、両方のバージョンが同じステップを実行しますが、インデックス= 4になると、つまり、番号1をスワップする場合、2番目は1番目よりも多くのステップを実行します。どう思いますか?