链表排序

来源:互联网 发布:java byte赋值0xff 编辑:程序博客网 时间:2024/06/05 19:38

链表排序

链表排序也类似于数组等容器的排序,在这里我们使用选择排序法,当然其他的方法也是同样的道理.


//选择排序法 ----只给出主要代码class LinkList {private:int m_iData;string m_strName;LinkList * m_pNode;public:bool IsEmpty();void Sort(SortType type)};void LinkList::Sort(SortType type)//使用枚举类型 选择排序的方式{if (IsEmpty())//判断是否空return;LinkList *big = NULL, *next=NULL, *node=this,*pos=NULL;//与数组不同的是链表排序要多次改变指针域,并且我们还必须获得前后结点地址.while(node->m_pNode->m_pNode!=NULL){ big = next = node->m_pNode;//这样后一步复制使得big 和next 指向当前结点的前一个结点.while (next->m_pNode != NULL){switch (type) {case SortByNumber:if (big->m_iData >next->m_pNode->m_iData)//每次内循环获得值最小的结点,下同.{pos = next;big = next->m_pNode;}break;case SortByName:  if(big->m_strName>next->m_pNode->m_strName){pos = next;big = next->m_pNode;}break;}next = next->m_pNode;}if (big != node->m_pNode){//<span style="color:#ff0000;">核心部分</span>:获取到最大值的结点后和每次循环的第一个结点交换位置.<span style="font-size:14px;">pos->m_pNode = big->m_pNode;big->m_pNode = node->m_pNode;node->m_pNode = big;</span>}node = node->m_pNode;}}

0 0
原创粉丝点击