void insertsort (DataType a, int n) { for (i=2; i<=n; i++) //需要n-1趟,此时数组其实是从1开始而不是0, { a[0]=a[i]; //将a[i]赋予监视哨a[0],其实a[0]相当于temp变量。 j=i; while (a[0].key<a[j-1].key) //搜索插入位置 { a[j]=a[j-1]; j--; } a[j]=a[0]; // 将原a[i]中的记录放入第j+1个位置 } } 修改后: void insertsort (DataType a, int n) { for (i=1; i<n; i++) //需要n-1趟,此时数组其实是从1开始而不是0, { int temp = a[i]; int j=i; while (temp<a[j-1]) //搜索插入位置 { a[j]=a[j-1]; j--; } a[j]=temp; // 将原a[i]中的记录放入第j+1个位置 } } 这是个序号一致算法: for( i = 1; i < n; ++i) { int temp = d[i]; for ( j = i; j > 0 && temp < d[j-1]; --j) { d[j] = d[j-1]; } d[j] = temp; }