您的位置:首页 > 理论基础 > 数据结构算法

数据结构-链表排序总结

2017-12-10 16:19 218 查看
一、链表快速排序

1、让第一个节点为中心点

2、创建2个指针(p,q),p指向头结点(第一个节点),q指向p的下一个节点

3、q开始遍历,如果发现q的值比中心点的值小,则此时p=p->next,并且执行当前p的值和q的值交换,q遍历到链表尾即可

4、把头结点的值和p的值执行交换。此时p节点为中心点,并且完成1轮快排

5、使用递归的方法即可完成排序

具体图解如下:



6、代码:

//以头结点值为基准元素进行划分

public static void quikSort(ListNode begin, ListNode end){

index=paration(begin, end);

//递归进行快排

quickSort(begin,index);

quickSort(index.next,end);

}

public static ListNode paration(ListNode begin, ListNode end){

if(begin==null || begin==end)

return begin.val;

int val=begin.val;//进行比较的中心点

ListNode p=begin, q=begin.next;//p指向头结点,q指p的下一个节点

whie(q!=end.next){//当q遍历到最后一个元素结束

if(q.val<val){//若q值小于基准元素则交换,否则,进行遍历

p=p.next;

int temp=q.val;

q.val=p.val;

p.val=temp;

}

q=q.next;

}//遍历完成一次后,将p值与begin进行交换,则p就为最后基准元素的位置,返回p

begin.val=p.val;

p.val=val;

return p;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: