以下代码是链表排序代码,请问它们是根据什么信息进行排序的?
以下代码是链表排序代码,请问它们是根据什么信息(什么内容)进行排序的?
Q3 链表排序
1 double cmp(ListNode *p ,ListNode *q)
2 {return (p->keyVal - q->keyVal);}
3
4 ListNode* mergeSortList(ListNode *head)
5 {
6 ListNode *p, *q, *tail, *e;
7 int nstep = 1;
8 int nmerges = 0;
9 int i;
10 int psize, qsize;
11 if (head == NULL || head->next == NULL)
12 {return head;}
13 while (1)
14 { p = head;
15 tail = NULL;
16 nmerges = 0;
17 while (p)
18 { nmerges++; q = p; psize = 0;
19 for (i = 0; i < nstep; i++)
{
20 psize++;
21 q = q->next;
22 if (q == NULL)break;
23 }
24 qsize = nstep;
25 while (psize >0 || (qsize >0 && q))
26 {
27 if (psize == 0)
{
e = q; q = q->next; qsize--;
}
28 else
if (q == NULL || qsize == 0)
{
e = p; p = p->next; psize--;
}
29 else
if (cmp(p,q) <= 0)
{
e = p; p = p->next; psize--;
}
30 else
{
e = q; q = q->next; qsize--;
}
31 if (tail != NULL)
{
tail->next = e;
}
32 else{head = e;}
33 tail = e;
34 }
35 p = q;
36 }
37 tail->next = NULL;
38 if (nmerges <= 1){return head;}
39 else{nstep <<= 1;}
40 }
41 }
[解决办法]
cmp是怎么实现的嘛,主要是看看这个函数!
[解决办法]
这是归并 排序吗?
[解决办法]
字符串排序。
std::vector<std::string> v;
v.push_back("avdvsa");
v.push_back("fdsg");
v.push_back("asdff");
std::sort(v.begin(),v.end());
[解决办法]
是通过节点的值域大小排序,不过感觉程序写的好嗦
[解决办法]
抓重点
[解决办法]
cmp是怎么实现的嘛,主要是看看这个函数!
1 double cmp(ListNode *p ,ListNode *q)
2 {return (p->keyVal - q->keyVal);}
这个主要是对数字进行排序的
抓重点
什么意思?
要找排序的依据,自然看 cmp 函数了