首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 嵌入开发 > WinCE >

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

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

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

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 }
[解决办法]
上面ListNode如何定义的,你要看链表的节点才能清除。不过从cmp猜应该是根据keyVal(double)排序。
你要文件名排序可以考虑wcscmp。不过这个只是最基本的,如果你的中文排序有特殊要求就只能自己实现。

[解决办法]
另外如果是排序内容特别多,Merge排序并不是好的考虑,效率差一些。wince上可以采用希尔排序。

热点排行