j=start+i; I=start+(i+k)%len, temp=al while(l=start +i) j== start+(-start+k)%en,∥依次向右移 a start+i]=temp i/for J//RSh 1040 书后给出的解题思路在表述上存在问题,无法理解.比如说"把第一个序列划分为 两个子序列使其中的第一个子序列含有s1个记录0<=sl<s第二个子序列有s个 记录"可是题目中并没有说明,第一个序列的长度<2s请会做的朋友提供解法 1041 void Hash sort(inta[对1000个关键字为四位整数的记录进行排序 intb[10000 for(i=0<1000:+)∥直接按关键字散列 for(=al[]b[](+1)%10000g bjF=a[: for(i=0,=0;<1000计+)/将散列收回a中 for(xbll, k=j; b[]; k=(k+1)%10000) if(bk=-x a[+}=x; i//Hash Sort 10.42 typedef struct i ntgt;/于该记录的个数{ j=start+i;l=start+(i+k)%len;temp=a[j]; while(l!=start+i) { a[j]=temp; temp=a[l]; a[l]=a[j]; j=l;l=start+(j-start+k)%len; //依次向右移 } a[start+i]=temp; }//for }//RSh 10.40 书后给出的解题思路在表述上存在问题,无法理解.比如说,"把第一个序列划分为 两个子序列,使其中的第一个子序列含有 s1 个记录,0<=s1<s,第二个子序列有 s 个 记录."可是题目中并没有说明,第一个序列的长度<2s.请会做的朋友提供解法. 10.41 void Hash_Sort(int a[ ])//对 1000 个关键字为四位整数的记录进行排序 { int b[10000]; for(i=0;i<1000;i++) //直接按关键字散列 { for(j=a[i];b[j];j=(j+1)%10000); b[j]=a[i]; } for(i=0,j=0;i<1000;j++) //将散列收回 a 中 if(b[j]) { for(x=b[j],k=j;b[k];k=(k+1)%10000) if(b[k]==x) { a[i++]=x; b[k]=0; } }//if }//Hash_Sort 10.42 typedef struct { int gt; //大于该记录的个数