永发信息网

若待排序列用带头结点的单链表存储,试给出简单选择排序算法. 求大神!

答案:2  悬赏:20  手机版
解决时间 2021-03-28 05:57
  • 提问者网友:锁深秋
  • 2021-03-27 13:54
若待排序列用带头结点的单链表存储,试给出简单选择排序算法. 求大神!
最佳答案
  • 五星知识达人网友:空山清雨
  • 2021-03-27 14:07
void selectsort(pointer &h)//h为头指针
{
pointer pCur = h;
pointer pCurPre = NULL;
pointer pMin = pCur;
pointer pMinPre = pCurPre;
bool bFirstFlag = true;

while (pCur)
{
//遍历以pCur为头节点的链表中key值最小的节点
pMin = pCur;
pMinPre = pCurPre;
pointer pTemp1 = pCur;
while (pTemp1->next)
{
if (pMin->key > pTemp1->next->key)
{
pMin = pTemp1->next;
pMinPre = pTemp1;
}

pTemp1 = pTemp1->next;
}

//交换key值最小的节点与pCur节点的位置
if (pCur->next == pMin)
{
pCur->next = pMin->next;
pMin->next = pCur;
pCurPre->next = pMin;
}
else
{
pointer pTemp2 = pCur->next;
pCur->next = pMin->next;
pMin->next = pTemp2;

if (pCurPre)
{
pCurPre->next = pMin;
}

if (pMinPre)
{
pMinPre->next = pCur;
}
}

if (bFirstFlag)
{
h = pMin;
bFirstFlag = false;
}

pCurPre = pMin;
pCur = pMin->next;
}
}
全部回答
  • 1楼网友:独行浪子会拥风
  • 2021-03-27 14:36
void selectsort(pointer &h)//h为头指针
pointer p,s,pt; 
p = h;
s = p->next;
while(p->next) {
while(s->next) {
if(p->next->key > s->next->key) {
pt = p->next;
p->next = s->next;
s->next = p->next->next;
p->next->next = pt;
}
else s = s->next;
}
p = p->next;
s = p->next;
}
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯