链式快排
来源:互联网 发布:阿里备案域名购买 编辑:程序博客网 时间:2024/06/05 06:14
链式快排(linked quicksort)实现。
保存一个p_small指针,p_small指针指向比pivot小的数。另外一个指针p一直往右移动,p_small指针只有在遇到比pivot小的数的时候才往前移动。当遇到比pivot小的元素时,p_small指针往右移动一位,然后交换p_small指针与指针p指向的节点的值。
tail在调用的时候需为NULL
#include<iostream>using namespace std;struct node{node():next(NULL){}node(int d,node *n):data(d),next(n){}int data;node* next;};void swap(node *p,node *q){int temp=p->data;p->data=q->data;q->data=temp;}//tail is excluded in the sequence to be sorted//actual parameter tail is NULL when first calledvoid quicksort(node *head,node *tail){if(head==NULL||head->next==tail||head==tail)return;node *p=head->next;node *p_small=head;int temp;while(p!=tail){if(p->data<head->data){p_small=p_small->next;if(p!=p_small)swap(p,p_small);}p=p->next;}if(p_small!=head){swap(p_small,head);quicksort(head,p_small);}quicksort(p_small->next,tail);};void printList(node *head){while(head!=NULL){cout<<head->data<<" ";head=head->next;}}int main(){node n1(5,NULL);node n2(4,NULL);node n3(3,NULL);node n4(2,NULL);node n5(1,NULL);n1.next=&n2;n2.next=&n3;n3.next=&n4;n4.next=&n5;quicksort(&n1,NULL);printList(&n1);}
- 链式快排
- 快排
- 快排
- 快排
- 快排
- 快排
- 快排
- 快排
- 快排
- 快排
- 快排
- 快排
- 快排
- 快排
- 快排
- 快排
- 快排
- 快排
- 文件查找命令find,locate,whereis,which
- 2013.10.20
- FAT文件系统学习
- Tomcat性能优化
- iOS SDK:预览和打开文档
- 链式快排
- Advanced Memory Allocation 内存分配进阶
- C++运算符重载
- 记第一次自考
- 既然C++读作“C加加”,那为什么C#不能读作“C井”呢?
- 初识Objecive-C 之 类目、延展、协议
- 移动周报:IT人必看!9大最火移动开发技能
- Android 4.3实现类似iOS在音乐播放过程中如果有来电则音乐声音渐小铃声渐大的效果(二)
- posix_memalign