[NOIP算法]快速排序——双关键字
来源:互联网 发布:ubuntu安装教程分区 编辑:程序博客网 时间:2024/05/17 08:31
关于快排的双关键字排序。
要求:a[i]按照从小到大排序,a[i]相同则按b[i]从小到大排序。
核心:先比较a[i],按正常排序;或则a[i]相同,则b[i]按照顺序也可通过。
代码:
program qsort_double;var n,i:longint; a,b:array[1..10000]of longint;procedure qsort(x,y:longint);var i,j,mid1,mid2,t:longint;begin i:=x;j:=y; mid1:=a[(x+y) div 2]; mid2:=b[(x+y) div 2]; repeat while (a[i]<mid1)or(a[i]=mid1)and(b[i]<mid2) do i:=i+1; while (a[j]>mid1)or(a[j]=mid1)and(b[j]>mid2) do j:=j-1; if i<=j then begin t:=a[i];a[i]:=a[j];a[j]:=t; t:=b[i];b[i]:=b[j];b[j]:=t; i:=i+1;j:=j-1; end; until i>j; if i<y then qsort(i,y); if x<j then qsort(x,j);end;begin read(n); for i:=1 to n do read(a[i],b[i]); qsort(1,n); for i:=1 to n do writeln(a[i],' ',b[i]);end.
扩展:若为三关键字,则改成
while (a[i]<mid1)or(a[i]=mid1)and(b[i]<mid2)or(a[i]=mid1)and(b[i]=mid2)and(c[i]<mid3) do i:=i+1;
while (a[j]>mid1)or(a[j]=mid1)and(b[j]>mid2)or(a[j]=mid1)and(b[j]=mid2)and(c[j]>mid3) do j:=j-1;
- [NOIP算法]快速排序——双关键字
- NOIP复习-001——快速排序
- 排序算法—快速排序
- 排序算法—快速排序
- 【基础练习】结构体定义比较函数双关键字排序
- 【算法】——快速排序
- 算法——快速排序
- 算法——快速排序
- 算法——快速排序
- 算法——快速排序
- 算法——快速排序
- 算法——快速排序
- 算法——快速排序
- 算法——快速排序
- 算法导论—快速排序
- 啊哈!算法—快速排序
- 排序算法———快速排序
- 排序算法(一)——快速排序
- What you absolutely must know to use boost smart pointers correctly
- 深入浅出FFMPEG
- 统计素数的和(指针法)
- 一位软件工程师的6年总结
- C单链表实现数据查找
- [NOIP算法]快速排序——双关键字
- Linux字符驱动中动态分配设备号与动态生成设备节点
- Oracle 数据导入整理
- 转:从业者亲述:你所不知道的香港互联网
- 9个offer,12家公司,35场面试,从微软到谷歌,应届计算机毕业生的2012求职之路
- 莫名戳中你笑点 法海不懂爱的真相
- linux-0.11调试教程,task3(03),do_signale之后的用户栈
- python单引号、双引号和三双引号的区别
- 查找最小的k个元素