根据《算法导论》(第二版)中的描叙,对第(2)个程序略加修改,使得每趟的移动在判断后完成,即得到书中的实现:
(修改部分为 //......// 中的内容,修改后程序更加简洁)
#include<stdio.h>
#include<stdlib.h>
#define ARRSIZE 10
int main(void)
{
int arr[ARRSIZE]={2,6,3,5,4,7,1,0,9,8};
int i,insert_number;
int j,k;
printf("Before: ");
for(i=0;i<ARRSIZE;i++)
printf("%d ",arr[i]);
printf("\n");
printf("\n");
for(k=1;k<ARRSIZE;k++){
printf(" --->%d: ",k);
for(i=0;i<ARRSIZE;i++){
if(i==k)
printf("[%d] ",arr[i]);
else
printf("%3d ",arr[i]);
}
printf("\n");
insert_number=arr[k];
j=k-1;
while(j>=0 && insert_number<arr[j]){
arr[j+1]=arr[j];
j--;
}
///
arr[j+1]=insert_number;
printf(" --->%d: ",k);
for(i=0;i<ARRSIZE;i++){
if(i==j+1)
printf("[%d] ",arr[i]);
else
printf("%3d ",arr[i]);
}
printf("\n");
printf("\n");
}
printf(" After: ");
for(i=0;i<ARRSIZE;i++)
printf("%d ",arr[i]);
printf("\n");
system("PAUSE");
return 0;
}