链表快速排序
来源:互联网 发布:sd卡恢复数据 编辑:程序博客网 时间:2024/06/07 07:13
如何根据链表的某一元素对整体进行快速排序?
数组的快速排序法
/*对数组中的元素按照从小到大的顺序快速排序*/void QuickSort(int * a,int left,int right){ //设置终结递归的条件 if(left>=right) return ; int l=left,r=right; int value=left; while(l<r) { while((a[r]<=value)&&(l<r)) r-; if(l<r) { a[l]=a[r]; l++; } while((a[l]>=value)&&(l<r)) l++; if(l<r) { a[r]=a[l]; r--; } } a[l]=value; //对两侧的数据分别进行递归排序 QuickSort(a,left,l-1); QucikSort(a,r+1,right);}
链表的快速排序遇到的困难
- 对链表而言,包含对个数据,因此要根据某一元素排序,交换其他所有元素。
- 由于链表只能依次进行查找,相对于数组排序不能用大于小于表示元素的关系。
- 由于右边的元素要向前查找,因此最好使用双向链表进行分析。
链表的快速排序方法
/*left和right分别是双向链表开头和结尾的元素指针*/void RankList(Stu * left, Stu * right){//由于链表的局限性,不能比较大小,只能判断是否相等 if (left == right) return; Stu * l, *r; l = left; r = right; //保存所有的元素(包括value本身) int value = left->score; do { while ((l != r) && (r->score <= value)) r = r->front; if (l != r) { //进行赋值操作,同样是所有元素 l->score=r->score; l = l->next; } while ((l != r) && (l->score >= value)) l = l->next; if (l != r) { //进行赋值操作,同样是所有元素 r->score = l->score; r = r->front; }} while (l != r);//将所有之前保存的元素赋值l->score = value;//在递归之前判断是否继续进行递归if (l!=left) RankList(left,l->front);if (r!=right) RankList(r->next,right);}
阅读全文
0 0
- 链表排序--快速排序
- 链表快速排序
- 链表快速排序
- 快速排序链表
- 链表快速排序
- 单向链表快速排序
- 单向链表快速排序
- 链表的快速排序
- 链表的快速排序
- 链表翻转 快速排序
- 单向链表排序:快速排序和归并排序
- C语言双向链表 快速排序
- 循环双向链表及快速排序
- 双向链表的快速排序
- 双向链表的快速排序
- 基于链表的快速排序
- 链表的QuickSort快速排序法
- 算法:链表的快速排序法
- oracle查看执行最慢与查询次数最多的sql语句
- 补码原理——负数为什么要用补码表示
- Ubuntu防火墙
- 自定义View各种形状画法
- ELK 日志系统搭建--监控nginx
- 链表快速排序
- H.265与H.264的区别技术分析
- vue开发:vue-cli引入swiper
- idea 如何将javaweb项目打成jar包
- poj1035——Spell checker
- Ubuntu下shadowsocks配置说明
- Spring Boot使用redis做数据缓存
- 接口测试用例设计总结
- Hadoop 入门简介