这是插入排序的两个版本,我用伪代码实现一个,一个直接实现。我想知道哪个版本需要更多的步骤和空间(即使是一点空间也很复杂)。
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}。在我看来,第二个版本采取了更多步骤,因为它一个接一个地交换数字,而第一个版本在 while 循环中交换更大的数字,然后交换最小的数字。例如:直到 index = 3,两个版本都采取相同的步骤,但是当 index = 4 时,即交换编号 1,第 2 次比第 1 次采取更多的步骤。你怎么看?