![](https://csdnimg.cn/release/download_crawler_static/87176190/bg7.jpg)
comparef++;
if (j<m && (Get(j)->data>Get(j + 1)->data)) j++;
if (Get(i)->data < Get(j)->data) break;
else
{
turn(Get(i), Get(j));
i = j;
j = 2 * i;
}
}
}
voidLinkList::heapsort(intn)
{
LARGE_INTEGER t1, t2, feq;
QueryPerformanceFrequency(&feq); //每秒跳动次数
QueryPerformanceCounter(&t1); //测前跳动次数
for (int i = n / 2; i >= 1; i--)
sift(i, n);
for (int i = 1; i < n; i++)
{
turn(Get(1), Get(n - i + 1));
sift(1, n - i);
}
QueryPerformanceCounter(&t2); //测后跳动次数
double d = ((double)t2.QuadPart - (double)t1.QuadPart) / ((double)feq.QuadPart);//时间差秒
cout << "操作时间为:" << d << endl;
}
其中堆排序中需要知道孩子节点和父亲节点处的值,故设置了函数获取i 出的指针。
node*LinkList::Get(inti)
{
node*p = front->next;
int j = 1;
while (j != i&&p)
{
p = p->next;
j++;
}
if (!p) throw"查找位置非法";
elsereturn p;
};
6.输出结果的函数:
void tell(LinkList &a, LinkList &b, LinkList &c, LinkList &d, LinkList &e)