插入元素 从后向前 与循环不变式的元素比较
#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,index;
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])
j--;
for(index=k;index>j;index--)
arr[index]=arr[index-1];
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;
}
插入逻辑:
程序结果:
说明:若原插入数组中元素是按从小到大的顺序排列,则此插入法每趟需比较的次数为最小,此时效率最高;
若原插入数组中元素是按从大到小的顺序排列,则此插入法每趟需比较的次数为最大,此时效率最低。