对于具有n 个元素的一个数据序列,若只需得到其中第k 个元素之前的部分排序,最好采用(59),使用分治(Divide and Conquer)策略的是(60)算法。
(59)处填()。对于具有n个元素的一个数据序列,若只需得到其中第k个元素之前的部分排序,最好采用 (62) ,使用分治(Divide and conquer)策略的是 (63) 算法。
(62)处填()。对于具有n 个元素的一个数据序列,若只需得到其中第k 个元素之前的部分排序,最好采用(59),使用分治(Divide and Conquer)策略的是(60)算法。
(60)处填()。
[说明]
对于具有n个元素的整型数组a,需要进行的处理是删除a中所有的值为0的数组元素,并将a中所有的非0元素按照原顺序连续地存储在数组空间的前端。下面分别用函数CompactArr_v1和CompactArr_v2来实现上述处理要求,函数的返回值为非零元素的个数。
函数CompactArr_v1(int a[],intn)的处理思路是:先申请一个与数组a的大小相同的动态数组空间,然后顺序扫描数组a的每一个元素,将遇到的非0元素依次复制到动态数组空间中,最后再将动态数组中的元素传回数组a中。
函数CompactArr_v2(int a[],int n)的处理思路是:利用下标i(初值为0)顺序扫描数组a的每一个元素,下标k(初值为0)表示数组a中连续存储的非0元素的下标。扫描时,每遇到一个数组元素,i就增1,而遇到非0元素并将其前移后k才增1。
[C函数1]
int CompactArr_v1(int a[],int n)
int i,k;
int*temp=(int*)malloc(n* (1)
if(!temp)
return-1;
for(i=0,k=0;i<n;i++)
if(a[i]!=0)
(2) =a[i];
for(i=0; (3) ;i++)
a[i]=temp[i];
return k;
[C函数2]
int CompactArr v2(int a[],int n)
int i,k;
for(i=0,k=0;i<n;i++)
if(a[i]!=0)
(4) =a[i];
return k;
请根据说明中函数CompactArr_v1的处理思路填补空缺(1)~(3),根据CompactArr_v2的处理思路填补空缺(4)。
我来回答: