链表的快速排序法
来源:互联网 发布:宏汇软件 编辑:程序博客网 时间:2024/06/14 17:55
如何根据链表的某一元素对整体进行快速排序?
数组的快速排序法
/*对数组中的元素按照从小到大的顺序快速排序*/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
- 链表的QuickSort快速排序法
- 算法:链表的快速排序法
- 链表的快速排序法
- 链表的快速排序
- 链表的快速排序
- 链表排序--快速排序
- 双向链表的快速排序
- 双向链表的快速排序
- 基于链表的快速排序
- 链表快速排序
- 链表快速排序
- 快速排序链表
- 链表快速排序
- 单向链表的冒泡排序和快速排序
- 链表的快速排序及冒泡排序
- 基于链表的快速排序及归并排序
- 快速排序法的实现
- 快速排序法的代码
- canvas 绘制灰太狼
- RecordManagement
- 学习js的Date对象,够了
- 索引的创建及调用
- MySQL的binlog日志
- 链表的快速排序法
- kettle调用自定义java类
- 程序员为什么要写博客, 从知识留存率金字塔说起
- Java多线程编程-(2)-可重入锁以及Synchronized的其他基本特性
- 基于jquery的layui的layer弹层框架
- react配置scss的方法。
- 基于layerweb弹层组件的批量删除ssm接口编程
- 对Q-learning和sarsa的进一步理解
- maven springmvc配置文件报错