选择排序在链表中的实现图解ppt课件

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
m=temp1;n=temp1->next; }
退出外循环,再次进入外循环
l
temp1
1
16
2
4
5
8
6
p
qm
n
if(temp1->next->data<q->data && temp1->next>data<n->data) {
m=temp1;n=temp1->next; }
退出外循环,再次进入外循环
{
p->next=n;
//①基准点的前一个节点指向最小点
p=n;
//②p后移
m->next=q;③
m=q;④
q=q->next;⑤
n=n->next;⑥
p->next=q;⑦
m->next=n;⑧
}
③最小点的前一个节点指向基准点

l ③
1
16
2
4
5
8
6
qm
② pn
if(m!=p->next || (m==p->next && m->data>n->data))
np
if(m!=p->next || (m==p->next && m->data>n->data))
{
p->next=n;
//①基准点的前一个节点指向最小点
p=n;
//②p后移
m->next=q;
//③最小点的前一个节点指向基准点
m=q;
//④m后移
q=q->next;
//⑤基准点下移
n=n->next;⑥
m=q;
//④m后移
q=q->next;
//⑤基准点下移
n=n->next;
//⑥最小点下移
p->next=q; //⑦被基准点指向的现在由最小点指向
m->next=n; //⑧被最小值指向的现在由基准点指向
}
完成交换

l

temp1
4
16
2
1
5
8
6
④ m
⑤ q


p
n


if(m!=p->next || (m==p->next && m->data>n->data))
{
p->next=n;
//①基准点的前一个节点指向最小点
p=n; ②
m->next=q; ③
m=q; ④
q=q->next⑤;
n=n->next; ⑥
p->next=q; ⑦
m->next=n; ⑧
}
②p后移

l
temp1
4
16
2
1
5
8
6

q
m
np
if(m!=p->next || (m==p->next && m->data>n->data))
m=temp1;n=temp1->next; }
退出外循环,再次进入外循环
l
temp1
1
16
2
4
5
8
6
p
qm
n
if(temp1->next->data<q->data && temp1->next>data<n->data) {
m=temp1;n=temp1->next; }
退出外循环,再次进入外循环
q始终指向基准点,p始终指向基准点的前一个节点 n始终指向最小点,m始终指向最小点的前一个节点 temp1则作为扫描指正,扫描基准点以后的整个链表
l
temp1
4
16
2
1
5
8
6
p
q
l
m
n
temp1
4
16
2
1
5
8
6
p
q
m
n
temp1=temp1->next;
q始终指向基准点,p始终指向基准点的前一个节点 n始终指向最小点,m始终指向最小点的前一个节点 temp1则作为扫描指正,扫描基准点以后的整个链表
{
p->next=n;
//①基准点的前一个节点指向最小点
p=n;
//②p后移
m->next=q;
//③最小点的前一个节点指向基准点
m=q;
//④m后移
q=q->next;
//⑤基准点下移
n=n->next;
//⑥最小点下移
p->next=q;
//⑦被基准点指向的现在由最小点指向
m->next=n;⑧
l
temp1
4
16
2
1
5
8
6
p
qm
n
m=temp1;n=temp1->next;
q始终指向基准点,p始终指向基准点的前一个节点 n始终指向最小点,m始终指向最小点的前一个节点 temp1则作为扫描指正,扫描基准点以后的整个链表
l
temp1
4
16
2
1
5
8
6
p
qm
n
l
temp1
4
16
2
1
5
8
6
p
q
m
n
{
p->next=n;
//①基准点的前一个节点指向最小点
p=n;
//②p后移
m->next=q;③
m=q;④
q=q->next;⑤
n=n->next;⑥
p->next=q;⑦
m->next=n;⑧
}
③最小点的前一个节点指向基准点

l

temp1
4
16
2
1
5
8
6

q
m
np
if(m!=p->next || (m==p->next && m->data>n->data))
p->next=q;⑦
m->next=n;⑧
}
⑥最小点下移

l

temp1
4
16
2
1
5
8
6




m
q
p
n
if(m!=p->next || (m==p->next && m->data>n->data))
{
p->next=n;
//①基准点的前一个节点指向最小点
p=n;
//②p后移
m->next=q;
{
p->next=n; //①基准点的前一个节点指向最小点
p=n;
//②p后移
m->next=q; //③最小点的前一个节点指向基准点
m=q;
//④m后移
q=q->next;⑤
n=n->next;⑥
p->next=q;⑦
m->next=n;⑧
}
⑤基准点下移

l

temp1
4
16
2
1
5
8
6



m
q
l
temp1
1
16
2
4
5
8
6
p
qm
n
if(temp1->next->data<q->data && temp1->next>data<n->data) {
m=temp1;n=temp1->next; }
退出外循环,再次进入外循环
l
temp1
1
16
2
4
5
8
6
p
qm
n
if(temp1->next->data<q->data && temp1->next>data<n->data) {
}
顺序结构展示
l
temp1
1
16
2
4
5
8
6
p
q
m
n
if(m!=p->next || (m==p->next && m->data>n->data))
{
p->next=n;
//①基准点的前一个节点指向最小点
p=n;
//②p后移
m->next=q;
//③最小点的前一个节点指向基准点
m=q;
//④m后移
4
16
2
1
5
8
6
p
q
m
n
temp1=temp1->next;
q始终指向基准点,p始终指向基准点的前一个节点 n始终指向最小点,m始终指向最小点的前一个节点 temp1则作为扫描指正,扫描基准点以后的整个链表
l
temp1
4
16
2
1
5
8
6
p
q
l
m
n
temp1
4
16
2
1
5
8
6
p
q
m
n
temp1=temp1->next;
{
p->next=n;
//①基准点的前一个节点指向最小点
p=n;
//②p后移
m->next=q;
//③最小点的前一个节点指向基准点
m=q;
//④m后移
q=q->next;
//⑤基准点下移
n=n->next;
//⑥最小点下移
p->next=q;
//⑦被基准点指向的现在由最小点指向
m->next=n;
//⑧被最小值指向的现在由基准点指向
}
⑧被最小值指向的现在由基准点指向

l

temp1
4
16
2
1
5
8
6
④ m
⑤ q


p
n


if(m!=p->next || (m==p->next && m->data>n->data))
{
p->next=n; //①基准点的前一个节点指向最小点
p=n;
//②p后移
m->next=q; //③最小点的前一个节点指向基准点
{
p->next=n;
//①基准点的前一个节点指向最小点
p=n;
//②p后移
m->next=q;
//③最小点的前一个节点指向基准点
m=q;④
q=q->next;⑤
n=n->next;⑥
p->next=q;⑦
m->next=n;⑧
}
④m后移

l ③
1
16
2
4
5
8
跳出内循环,继续外循环
l
temp1
4
16
2
1
5
8
6
p
q
m
n
if(m!=p->next || (m==p->next && m-
>data>n->data)) {
q始终指向基准点,p始终
p->next=n;
指向基准点的前一个节点
p=n; m->next=q; m=q;
n始终指向最小点,m始 终指向最小点的前一个节
{
p->next=n;
//①基准点的前一个节点指向最小点
p=n;
//②p后移
m->next=q;
//③最小点的前一个节点指向基准点
m=q;④
q=q->next;⑤
n=n->next;⑥
p->next=q;⑦
m->next=n;⑧
}

l

④m后移
temp1
4
16
2
1
5
8
6


qm
np
if(m!=p->next || (m==p->next && m->data>n->data))
if(temp1->next->data<q->data && temp1-
>next>data<n->data)
{
m=temp1;n=temp1->next;
} 条件:最小点n后移的条件是比基准点小,还要比n本身小
q始终指向基准点,p始终指向基准点的前一个节点 n始终指向最小点,m始终指向最小点的前一个节点 temp1则作为扫描指正,扫描基准点以后的整个链表
l
temp1
1
16
2
4
5
8
6
p
qm
n
if(temp1->next->data<q->data && temp1->next>data<n->data) {
m=temp1;n=temp1->next; }
退出外循环,再次进入外循环
l
temp1
1
16
2
4
5
8
6
p
qm
n
if(m!=p->next || (m==p->next && m->data>n->data)) {
//③最小点的前一个节点指向基准点
m=q;
//④m后移
q=q->next;
//⑤基准点下移
n=n->next;
//⑥最小点下移
p->next=q;⑦
m->next=n;⑧
}
⑦被基准点指向的现在由最小点指向

l

temp1
4
16
2
1
5
8
6




m
q
p
n

if(m!=p->next || (m==p->next && m->data>n->data))
q=q->next;
//⑤基准点下移
n=n->next;
//⑥最小点下移
p->next=q;
//⑦被基准点指向的现在由最小点指向
m->next=n;
//⑧被最小值指向的现在由基准点指向
}
退出外循环,再次进入外循环
l
相关文档
最新文档