插入算法的伪代码为:
插入算法的伪代码为:
for j = 2 : length(a)
key = a[j];
while i > 0 && a[i] > key
a[i+1] = a[i];
i--;
a[i+1] = key;
C语言实现:
#include <stdio.h>
void main(){
int i,j;
int a[6] = {5,2,4,6,1,3};
int index;
for (j=2; j<=6; j++){
index = a[j];
i=j-1;
while (i > 0 && a[i] > index){
a[i+1] = a[i];
i--;
}
a[i+1] = index;
}
for (i=0; i<6; i++) {
printf("%d ", a[i]);
}
}
#include <stdio.h>
void main(){
int i,j;
int a[6] = {5,2,4,6,1,3};
int index;
for (j=2; j<=6; j++){
index = a[j];
i=j-1;
while (i > 0 && a[i] > index){
a[i+1] = a[i];
i--;
}
a[i+1] = index;
}
for (i=0; i<6; i++) {
printf("%d ", a[i]);
}
}
结果: 5 1 2 3 4 6
出现问题:
数组第一个数5没有参与排序
原因:
数组下标从0开始。
正确程序:
#include <stdio.h>
void main(){
int i,j;
int a[6] = {5,2,4,6,1,3};
int index;
for (j=1; j<6; j++){
index = a[j];
i=j-1;
while (i >= 0 && a[i] > index){
a[i+1] = a[i];
i--;
}
a[i+1] = index;
}
for (i=0; i<6; i++) {
printf("%d ", a[i]);
}
}
#include <stdio.h>
void main(){
int i,j;
int a[6] = {5,2,4,6,1,3};
int index;
for (j=1; j<6; j++){
index = a[j];
i=j-1;
while (i >= 0 && a[i] > index){
a[i+1] = a[i];
i--;
}
a[i+1] = index;
}
for (i=0; i<6; i++) {
printf("%d ", a[i]);
}
}