发布网友 发布时间: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);
}