读书人

以下代码是链表排序代码请教它们是根

发布时间: 2013-11-01 14:43:02 作者: rapoo

以下代码是链表排序代码,请问它们是根据什么信息进行排序的?
以下代码是链表排序代码,请问它们是根据什么信息(什么内容)进行排序的?

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());
[解决办法]
是通过节点的值域大小排序,不过感觉程序写的好嗦
[解决办法]
引用:
Quote: 引用:

cmp是怎么实现的嘛,主要是看看这个函数!



1 double cmp(ListNode *p ,ListNode *q)
2 {return (p->keyVal - q->keyVal);}

这个主要是对数字进行排序的


抓重点
[解决办法]
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

cmp是怎么实现的嘛,主要是看看这个函数!



1 double cmp(ListNode *p ,ListNode *q)
2 {return (p->keyVal - q->keyVal);}

这个主要是对数字进行排序的


抓重点


什么意思?

要找排序的依据,自然看 cmp 函数了

读书人网 >C语言

热点推荐