链表的排序——冒泡(交换数据与交换指针)
2016-11-20 23:08
183 查看
交换数值排序:
交换指针排序:
void sortList(Node * head, int len) { for(int i=0; i<len-1; i++) { Node * cur = head->next; for(int j=0; j<len-1-i;j++) { if(cur->data > cur->next->data) { int tmp = cur->data; cur->data = cur->next->data; cur->next->data = tmp; } cur = cur->next; } } }
交换指针排序:
void sortHeadByPtr(Node *head, int len) { Node * subHead ,*p,*q,*tmp; int i,j; for(i=0; i<len-1; i++) { subHead = head; p = head->next; //现在的指针序列:head--p--q q = p->next; for(j=0; j<len-1-i; j++) { if(p->data>q->data) { subHead->next = p->next; p->next = q->next; q->next = p; tmp = p; p = q; //当上面的交换完成后,最开始的变化为head--q--p q = tmp;//那么后面的排序就会出错,这里的操作就是把指针换回来 } subHead = subHead->next;//指针往后移动 p = p->next; q = q->next; } } }
相关文章推荐
- P279_1012 用了典型的冒泡法对字符串排序。侧重指针应用,交换指针所指向的地址。
- 链表排序交换节点为什么还得单独交换next指针?
- 链表的排序(交换指针指向)
- P279_1014 按照输入时逆序,只要用指针做交换即可。若大数据不便于移动,输入时建标识表排序之
- SDUT-3399 数据结构实验之排序二:交换排序(冒泡+快排)
- 暑假集训 8.13 数据结构实验之排序二:交换排序 (冒泡 与 快排.....)
- 采用选择排序法对链表进行排序,注意交换操作中不是对链表里某一节点里的某一元素进行交换,而是对两节点指针的交换
- Java学习之数组1(1.数组的声明;2.元素为引用数据类型的数组;3.关于main方法里的String[] args;4.数组排序;5.数3退1 数组算法,(用数组模拟链表);6数组查找之二分法;7数组的拷贝)
- 【数据结构与算法基础】单链表及其应用基数排序 / Singly Linked List and radix sort
- 用双向链表对整形数据进行排序
- 数组的排序,冒泡指针法
- 冒泡排序、交换排序、选择排序、插入排序、快速排序、SHELL排序
- 不用指针和对象数据类型来实现链表
- java:四种int【】数据排序,冒泡,插入,选择,快速排序
- 程序员面试宝典之数据结构基础----④单链表排序(读后)
- 白话经典算法系列之四 直接选择排序及交换二个数据的正确实现
- 数据结构&算法实践—【排序|交换排序】鸡尾酒排序
- 冒泡、交换、选择排序
- 单双链表,通过指针变动交换相邻元素
- 白话经典算法系列之四 直接选择排序及交换二个数据的正确实现