#include #include void Straightinsertionsort(int a[]) { int i,j,k; int b[10]={0}; b[0]=a[0]; for(i=1;i { for(j=i-2;j>=0;j--) { if(a[i]>b[j]) { for(k=i-2;k>j;k--) { b[k+1]=b[k]; } b[j+1]=a[i]; } } } for(i=0;i<10;i++) { printf("%d",b[i]); } } int main() { int a[10]={0}; int i; for(i=0;i<10;i++) { scanf("%d",&a[i]); } Straightinsertionsort(a); return 0; }
for(i = 0; i < len; i ++){ tmp = a[i]; for(j = i - 1; j >= 0; j --){ if(tmp < a[j]){ //小于a[j],则a[j]向后移动 a[j + 1] = a[j]; }else{ //若tmp>=a[j],则说明找到a[i]的插入位置,跳出循环 break; } } a[j + 1] = tmp;//j之后的位置就是a[i]在有序中的位置 }
i=0,或者i=1都可以,i=0,j=-1,不满足j>=0,第二个for不执行;这个算法的思想是i之前的元素都是有序,然后在i之前查找a[i]要插入的位置(第二个for的作用)。