原地排序-更简洁的算法
摘要:
在我以前的这篇文章中:原地排序与链表翻转解决这个问题是先把链表翻转,然后再循环左移,原理是清楚了,可是稍显繁琐。这里有更简单的解法:void rearrange(KeyVal* a, int n) { for (int i = 0; i next = p->next->next,这是一个删除链表结点的操作!swap(a[i], a[j]) 实际上是将 a[j] 从 j 所属的那个大环状链表中删除!该算法的本质是:每次碰到一个结点,就将该结点的后继结点从循环链表中删除,删除的同时,被删除的那个结点就归位了。 阅读全文
posted @ 2013-03-24 19:24 能发波 阅读(272) 评论(0) 推荐(0) 编辑