单链表的排序
2015-11-10 10:46
253 查看
/*单链表结点数据结构*/
typedef struct node
{
int key;
struct node *next;
}node_t, *list_t;
1.2快速排序(时间复杂度为O(nlogn))
声明两个指针p和q,两个指针均往next方向移动,移动过程中保持p之前的key都小于选定的key,p和q之间的key都大于选定的key,则当q走到末尾的时候便完成了一次支点的寻找。
typedef struct node
{
int key;
struct node *next;
}node_t, *list_t;
1移动结点上的值
1.1选择排序(时间复杂度为O(n^2))void list_select_sort(list_t h) { int min = 0; list_t p = NULL; list_t q = NULL; list_t s = NULL; for (p = h; p != NULL; p = p->next) { min = p->key; s = p; for (q = p->next; q != NULL; q = q->next) { if (min > q->key) { min = q->key; s = q; } } s->key = p->key; p->key = min; } return ; }
1.2快速排序(时间复杂度为O(nlogn))
声明两个指针p和q,两个指针均往next方向移动,移动过程中保持p之前的key都小于选定的key,p和q之间的key都大于选定的key,则当q走到末尾的时候便完成了一次支点的寻找。
/*交换数据*/ void swap(int *n, int *m) { int temp; temp = *n; *n = *m; *m = temp; } /*分区操作*/ list_t partion(list_t bgn, list_t end) { int key = bgn->key; list_t p = bgn; list_t q = bgn->next; while (q != end) { if (q->key < key) { p = p->next; swap(&p->key, &q->key); } q = q->next; } swap(&p->key, &bgn->key); return p; } /*快速排序*/ void list_quick_sort(list_t bgn, list_t end) { if (bgn != end) { list_t part = partion(bgn, end); list_quick_sort(bgn, part); list_quick_sort(part->next, end); } }
2移动结点
类似快速排序,采用递归分治方法进行排序的,每次对原有的链表进行一次划分,每次划分取链表的左端的那个结点值作为枢轴,将小于枢轴的值用t1指针连接起来,将大于枢轴的值用t2指针连接起来,然后在分别对这2个短的链表进行递归排序。list_t qsortL(list_t h, list_t lnext) { node_t n1, n2; list_t p, t1 = &n1, t2 = &n2; if(h == NULL) return lnext; for(p = h->next; p != NULL; p = p->next) { if (p->key < h->key) { t1->next = p; t1 = p; } else { t2->next = p; t2 = p; } } t1->next = t2->next = NULL; h->next = qsortL(n2.next,lnext); return qsortL(n1.next, h); }
相关文章推荐
- 大容量磁盘分区表、文件系统、分区工具的选择
- MySQL index hint
- 在tomcat访问时无需填写项目名称的配置
- 静态库的pdb文件
- php中关于 left join 的分页显示
- java使用jacob将office转pdf
- iOS Runtime应用实例(一)类别添加属性
- ios8.0下CLLocationManager定位服务需要授权了
- Hadoop MapReduce具体运行过程
- 配置master/slave主从数据库
- Queue接口的实现与使用
- TextLable,TextView首行缩进问题
- javascript学习之路--判断浏览器是否支持javascript解释型脚本语言。
- 菜鸟都会使用的在mac上github上传项目
- jboss 并发maxinum 1024问题跟踪以及解决
- 网页JS获取当前地理位置(省市区)
- 单例模式
- sonar下载地址&使用
- 如何选择机器学习算法
- 安装 XHGui对 PHP 应用进行性能诊断