69,336
社区成员
发帖
与我相关
我的任务
分享
for(i=2;i<=8;++i)
//排序思想:在r[1]~r[i-1]已经递增排好序的情况下,将r[i]插入到合适的位置。所以i从2开始
if(r[i]<r[i-1])
//若第i个(待排的元素)不比r[i-1]小,则说明r[1]~r[i]已是递增序列,不用对r[i]排序了。
// 只有r[i]<r[i-1])时,才需为r[i]找合适的位置。
{
r[0]=r[i]; //设置哨兵,可简化下面循环中的结束条件。楼上几位修改时,都没注意到这一点。
for(j=i-1;r[0]<r[j];--j)
r[j+1]=r[j];
// 此处已不需要j>0的判断。 由上一句知r[0]是待插入的元素,已排好序的元素依次与它比,
// 比它大的都后移1位。即使待排元素比前面的都小,到j=0时循环条件也不成立了。
r[j]=r[0];
// 循环结束时,r[j]是最后一个移开的元素,也正是待插元素的正确位置,所以将这个元素放在这里。
}
void insertSort(int * p,int len)
{
int i=0, j=0;
int temp;
for(i=1; i<len; i++)
{
j=i;
temp=p[i];
while(j > 0 && temp < p[j-1])
{
p[j]=p[j-1];
j--;
}
p[j]=temp;
}
}