C语言程序求翻译 求解释!

发布网友 发布时间:2022-04-23 22:54

我来回答

2个回答

热心网友 时间:2023-10-12 19:46

void SelectSort(SortObject *p,unsigned long *compare,unsigned long *exchange)     

    int i,j,k; 
    RecordNode temp; 
    SortObject *pvector; 
    //为pvector指针 创建一个新对象
    if((pvector=(SortObject *)malloc(sizeof(SortObject)))==NULL) 
    { 
        printf("OverFollow!"); 
        getchar(); 
        exit(1); 
    }
    k=pvector->n;
    //为pvector的record数组分配空间
    pvector->record=(RecordNode *)malloc(sizeof(RecordNode)*k); 
    for(i=0;i<p->n;i++)/*复制数组*/ 
        pvector->record[i]=p->record[i]; //从p中复制数据到pvector里
    pvector->n=p->n; 
    *compare=0; //比较次数=0
    *exchange=0; //交换次数=0
    for(i=0;i<pvector->n-1;i++)  //循环每个RecordNode数据
    { 
        k=i; //假设第k条RecordNode拥有最小的key值
        for(j=i+1;j<pvector->n;j++) //循环当前RecordNode之后的所有RecordNode
        { 
            (*compare)++; //比较次数+1
            //如果key值比第k条数据还小,把k=j
            if(pvector->record[j].key<pvector->record[k].key) 
                k=j; 
        } 
        //当前RecordNode之后,最小key的数据是第k条
        if(k!=i) 
        { 
            //把k和i的数据交换,(把最小key放到最前面)
            temp=pvector->record[i]; 
            pvector->record[i]=pvector->record[k]; 
            pvector->record[k]=temp; 
            ( *exchange)+=3; //交换次数+3
        }
    }
    free(pvector); //释放空间  //没有释放pvector->record[]! 而且排序结果没有输出!
}

热心网友 时间:2023-10-12 19:47

void SelectSort(SortObject *p,unsigned long *compare,unsigned long *exchange) //定义了三个指针变量,分别为SortObject型、unsigned long 型
{
int i,j,k; //定义3个局部整形变量
RecordNode temp; //RecordNode为类的名字
SortObject *pvector; //SortObject类型的指针变量
if((pvector=(SortObject *)malloc(sizeof(SortObject)))==NULL) /*分配长度为SortObject字节的内存块,如果分配成功则返回指向被分配内存的指针(此存储区中的初始值不确定),否则返回空指针NULL。当内存不再使用时,应使用free()函数将内存块释放,malloc的全称是memory allocation,中文叫动态内存分配*/
{
printf("OverFollow!");
getchar(); //从键盘上读取一个字符
exit(1); //退出程序
}
k=pvector->n; //调用pvector所指向对象中的n成员,并将n的值赋给k
pvector->record=(RecordNode *)malloc(sizeof(RecordNode)*k); //同前面
for(i=0;i<p->n;i++)/*复制数组*/
pvector->record[i]=p->record[i]; //后面的不知道 了 ,不知是解决什么问题的
pvector->n=p->n;
*compare=0;
*exchange=0;
for(i=0;i<pvector->n-1;i++)
{
k=i;
for(j=i+1;j<pvector->n;j++)
{
(*compare)++;
if(pvector->record[j].key<pvector->record[k].key)
k=j;
}
if(k!=i)
{
temp=pvector->record[i];
pvector->record[i]=pvector->record[k];
pvector->record[k]=temp;
( *exchange)+=3;
}
}
free(pvector);
}

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com