2025年12月08日来源:信管网 作者:cnitpm
软件设计师案例分析当天每日一练试题地址:www.cnitpm.com/exam/ExamDayAL.aspx?t1=4
往期软件设计师每日一练试题汇总:www.cnitpm.com/class/27/e4_1.html
软件设计师案例分析每日一练试题(2025/12/7)在线测试:www.cnitpm.com/exam/ExamDayAL.aspx?t1=4&day=2025/12/7
点击查看:更多软件设计师习题与指导
软件设计师案例分析每日一练试题内容(2025/12/7)
【说明】信管网考友试题答案分享:
信管网1768*******:
//打印数组
void printarray(int arr[], int size) {..}
void shellsort(int data[ ], int n){
if (n <= 1) return;
int *delta;
int dk; //步长
int i=0,j,k=n;
int t; //临时存放
delta = (int *)malloc(sizeof(int) * (n / 2 + 1));
do{
k = k/2;
delta[i++]=k;
}while( k>1 );
i=0;
while((dk=delta[i])>0){
for (k = dk; k < n; k++) {
if( data[k]){
t = data[k];
for( j=k-dk; j>=0 && data[j]>t; j -=dk){
data[j + dk] = data[j] ;
}
data[j+dk] = t;
}
}
printf("第 %d趟 ,步长为%d 的时候,排完的数组为:", i+1, dk);
printarray(data,n);
++i;
}
}
信管网1768*******:
void shellsort(int data[ ], int n){
if (n <= 1) return; // 如果数组长度小于等于1,无需排序
int *delta;
int dk; //步长
int i=0,j,k=n;
int t; //临时存放
// 分配 delta 数组,大小为 n/2 + 1 以确保足够的空间
delta = (int *)malloc(sizeof(int) * (n / 2 + 1));
// 把 步长 存起来
do{
//(1);
k = k/2;
delta[i++]=k;
}while( k>1 ); //(2)
// 当n=8时,delta=[4,2,1]
delta[i] = 0; // 终止标志
printf("delta:");
printarray(delta,i);
i=0;
// 使用生成的步长序列进行希尔排序
while((dk=delta[i])>0){
// 对每个步长 dk 进行插入排序
for (k = dk; k < n; k++) {
//(3)
if( data[k]){
t = data[k];
//
for( j=k-dk; j>=0 && data[j]>t; j -=dk){
data[j + dk] = data[j] ;
}
data[j+dk] = t; //(4)
}
}
printf("%d 的步长时:", dk);
printarray(data,n);
++i;
}/*while*/
}
信管网cnit**************:
<br /><img src="http://pic.cnitpm.com/upload/2023/02/tbimg/02-26/1677397109.jpg" />
信管网cnit**************:
<br /><img src="http://pic.cnitpm.com/upload/2022/11/tbimg/11-02/1667342311.jpg" />
信管网cnit**************:
1. k = k/2
k >= 1
data[j + dk] >= data[j]
data[j+dk]=t
2, 大于 否
温馨提示:因考试政策、内容不断变化与调整,信管网提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准!