void InsertSort()
{
int i,j,x;
for(i=1;i<n;i++){
x=a[i]; //将此次待插入的元素存入x
for(j=i-1;j>=0;j--) //为x顺序向前寻找插入位置
if(x<a[j]) a[j+1]=a[j];else break;
a[j+1]=x; //将x插入到已找到的插入位置
}
}
请问下这个插入排序为什么要把x放到a[j+1],而不是a[j];谢谢!我现在老是感觉x小于a[j],然后a[j]向后移了一位,应该把x放在a[j]里面啊
{
int i,j,x;
for(i=1;i<n;i++){
x=a[i]; //将此次待插入的元素存入x
for(j=i-1;j>=0;j--) //为x顺序向前寻找插入位置
if(x<a[j]) a[j+1]=a[j];else break;
a[j+1]=x; //将x插入到已找到的插入位置
}
}
请问下这个插入排序为什么要把x放到a[j+1],而不是a[j];谢谢!我现在老是感觉x小于a[j],然后a[j]向后移了一位,应该把x放在a[j]里面啊
首先插入排序的核心思想是插入一个标志位置,标志位置的左侧是有序的队列。
然后将这个标志位置插入到左侧有序的队列中,然后这个标志位置右移动。
a[j+1]=x;的意思就是标志位右移。
重写了下,你看下。void InsertSort()
{
int i,j;
for(i=1;i<n;i++){
int x=a[i];
j=i;
while(j>0&&a[j-i]>=x){
a[j]=a[j-1];
--j;
}
a[j]=x;
}
}