pat 09-排序1. 排序(25)
来源:互联网 发布:vb与三菱plc通讯案例 编辑:程序博客网 时间:2024/04/28 22:27
突然发现堆排序不会了
//25ms,stl自带,干过他真难#include<stdio.h>#include<algorithm>using namespace std;int main(){ int a[100000+5],i,n; while(~scanf("%d",&n)) { for(i=0;i<n;i++) scanf("%d",&a[i]); sort(a,a+n); for(i=0;i<n-1;i++) printf("%d ",a[i]); printf("%d\n",a[n-1]); } return 0;}//31ms,原始希尔排序#include<stdio.h>void Shell_sort(int A[],int N){ int i; for(int D=N/2;D>0;D/=2)//希尔增量 { for(int P=D;P<N;P++) { int Tmp=A[P]; for(i=P;i>=D&&A[i-D]>Tmp;i-=D) A[i]=A[i-D]; A[i]=Tmp; } }}int main(){ int a[100000+5],n,i; while(~scanf("%d",&n)) { for(i=0;i<n;i++) scanf("%d",&a[i]); Shell_sort(a,n); for(i=0;i<n-1;i++) printf("%d ",a[i]); printf("%d\n",a[n-1]); } return 0;}//测试6超时,1637ms,插入排序,效果比冒泡好#include<stdio.h>void Insertion_sort(int a[],int n){ int i; for(int p=1;p<n;p++) { int tmp=a[p]; for(i=p;i>0&&a[i-1]>tmp;i--) a[i]=a[i-1]; a[i]=tmp; }}int main(){ int a[100000+5],n,i; while(~scanf("%d",&n)) { for(i=0;i<n;i++) scanf("%d",&a[i]); Insertion_sort(a,n); for(i=0;i<n-1;i++) printf("%d ",a[i]); printf("%d\n",a[n-1]); } return 0;}//测试4、6、8超时,冒泡#include<stdio.h>#include<algorithm>using namespace std;void Bubble_sort(int a[],int n){ for(int p=n-1;p>=0;p--) { int flag=0; for(int i=0;i<p;i++) { if(a[i]>a[i+1]) { swap(a[i],a[i+1]); flag=1; } } if(flag==0) break; }}int main(){ int a[100000+5],n,i; while(~scanf("%d",&n)) { for(i=0;i<n;i++) scanf("%d",&a[i]); Bubble_sort(a,n); for(i=0;i<n-1;i++) printf("%d ",a[i]); printf("%d\n",a[n-1]); } return 0;}//31ms,希尔排序,Hibbard增量#include<stdio.h>int b[20];int intt(){ int i; b[0]=1; for(i=1;i<=20;i++) { b[i]=2*b[i-1]; //printf("%d\n",b[i]); }}void Shell_sort(int A[],int N){ int i,k; for(i=20;i>=0;i--) if(b[i]<N) break; k=i; for(int D=b[k]-1;D>0;D=b[k]-1)//希尔增量 { //printf("%d\n",D); for(int P=D;P<N;P++) { int Tmp=A[P]; for(i=P;i>=D&&A[i-D]>Tmp;i-=D) A[i]=A[i-D]; A[i]=Tmp; } k--; }}int main(){ int a[100000+5],n,i; intt(); while(~scanf("%d",&n)) { for(i=0;i<n;i++) scanf("%d",&a[i]); Shell_sort(a,n); for(i=0;i<n-1;i++) printf("%d ",a[i]); printf("%d\n",a[n-1]); } return 0;}//27ms,希尔排序Sedgewick排序#include<stdio.h>#include<math.h>int b[20];int intt(){ int i; b[1]=1; for(i=2;i<=9;i++) { b[i]=pow(4.0,i*1.0)-3*(pow(2.0,i*1.0))+1; //printf("%d\n",b[i]); }}void Shell_sort(int A[],int N){ int i,k; for(i=9;i>=0;i--) if(b[i]<N) break; k=i; for(int D=b[k];D>0;D=b[k])//希尔增量 { //printf("%d\n",D); for(int P=D;P<N;P++) { int Tmp=A[P]; for(i=P;i>=D&&A[i-D]>Tmp;i-=D) A[i]=A[i-D]; A[i]=Tmp; } k--; }}int main(){ int a[100000+5],n,i; intt(); while(~scanf("%d",&n)) { for(i=0;i<n;i++) scanf("%d",&a[i]); Shell_sort(a,n); for(i=0;i<n-1;i++) printf("%d ",a[i]); printf("%d\n",a[n-1]); } return 0;}//并归递归形式#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <vector>#include <queue>#include <stack>#include <set>#include <map>#include <string>#include <math.h>#include <stdlib.h>#include <time.h>using namespace std;const int inf=1<<30;const int N=100000+5;void Merge(int a[],int tmpa[],int l,int r,int rightend){ int leftend=r-1; int tmp=l; int numint=rightend-l+1; while(l<=leftend&&r<=rightend) { if(a[l]<=a[r]) tmpa[tmp++]=a[l++]; else tmpa[tmp++]=a[r++]; } while(l<=leftend) tmpa[tmp++]=a[l++]; while(r<=rightend) tmpa[tmp++]=a[r++]; for(int i=0;i<numint;i++,rightend--) a[rightend]=tmpa[rightend];}//分治void Msort(int a[],int tmpa[],int l,int rightend){ int center; if(l<rightend) { center=(l+rightend)/2; Msort(a,tmpa,l,center); Msort(a,tmpa,center+1,rightend); Merge(a,tmpa,l,center+1,rightend); }}//统一函数接口void Merge_sort(int a[],int n){ int tmpa[N]; Msort(a,tmpa,0,n-1);}int main(){ int a[100000+5],n,i; while(~scanf("%d",&n)) { for(i=0;i<n;i++) scanf("%d",&a[i]); Merge_sort(a,n); for(i=0;i<n-1;i++) printf("%d ",a[i]); printf("%d\n",a[n-1]); } return 0;}/*测试点 结果 用时(ms) 内存(kB) 得分/满分0 答案正确 1 312 1/11 答案正确 1 184 10/102 答案正确 1 312 2/23 答案正确 4 312 2/24 答案正确 29 1592 2/25 答案正确 23 1592 2/26 答案正确 23 1592 2/27 答案正确 23 1664 2/28 答案正确 26 1336 2/2*///并归,非递归形式#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <vector>#include <queue>#include <stack>#include <set>#include <map>#include <string>#include <math.h>#include <stdlib.h>#include <time.h>using namespace std;const int inf=1<<30;const int N=100000+5;void Merge1(int a[],int tmpa[],int l,int r,int rightend){ int leftend=r-1; int tmp=l; int numint=rightend-l+1; while(l<=leftend&&r<=rightend) { if(a[l]<=a[r]) tmpa[tmp++]=a[l++]; else tmpa[tmp++]=a[r++]; } while(l<=leftend) tmpa[tmp++]=a[l++]; while(r<=rightend) tmpa[tmp++]=a[r++]; for(int i=0;i<numint;i++,rightend--) a[rightend]=tmpa[rightend];}void Merge_pass(int a[],int tmpa[],int n,int length){ int i,j; for(i=0;i<=n-2*length;i+=2*length) Merge1(a,tmpa,i,i+length,i+2*length-1); if(i+length<n) Merge1(a,tmpa,i,i+length,n-1); else for(j=i;j<n;j++) tmpa[j]=a[j];}void Merge_sort(int a[],int n){ int tmpa[N]; int length=1; while(length<n) { Merge_pass(a,tmpa,n,length); length*=2; Merge_pass(tmpa,a,n,length); length*=2; }}int main(){ int a[100000+5],n,i; while(~scanf("%d",&n)) { for(i=0;i<n;i++) scanf("%d",&a[i]); Merge_sort(a,n); for(i=0;i<n-1;i++) printf("%d ",a[i]); printf("%d\n",a[n-1]); } return 0;}/*测试点 结果 用时(ms) 内存(kB) 得分/满分0 答案正确 1 236 1/11 答案正确 1 256 10/102 答案正确 1 360 2/23 答案正确 4 360 2/24 答案正确 29 1564 2/25 答案正确 22 1640 2/26 答案正确 22 1640 2/27 答案正确 22 1536 2/28 答案正确 26 1384 2/2*/
0 0
- pat 09-排序1. 排序(25)
- PAT-A1075. PAT Judge (25)(排序)
- PAT 1025. PAT Ranking (25) 数据结构,排序
- 【PAT】1045. 快速排序(25)
- 1045. 快速排序(25) PAT
- PAT B1045. 快速排序(25)
- PAT 数据结构 07-排序1. 排序(25) 8种排序的比较
- 09-排序1. 排序(25)
- pat(A) 07-排序1. 排序(水题)
- 结构体排序-10-排序5 PAT Judge (25分)
- PAT 1089. Insert or Merge (25) 插入排序+归并排序
- 08-排序6. PAT Judge (25)
- PAT (Basic Level) 1045. 快速排序(25)
- 浙大PAT 1045. 快速排序(25)
- PAT-A1028. List Sorting (25)(排序.)
- PAT-A1083. List Grades (25)(排序)
- PAT Basic 1045. 快速排序(25)
- C++ - PAT - 1045. 快速排序(25)
- 关于使用saiku,MDX
- Eclipse中jsp、js文件编辑时,卡死现象解决汇总
- http://blog.itpub.net/7728585/viewspace-1164064/
- Intent匹配
- linux dev文件详解
- pat 09-排序1. 排序(25)
- Android时间获取与使用
- [ASP.NET MVC 小牛之路]04 - 依赖注入(DI)和Ninject
- 【精】表格(UITableView)总结(3):刷新(UIRefreshControl)
- 解决烦人的baidu推广等网页广告自动弹出
- 陈怡暖:(午评)鹰派言论促美元反弹,金银继续宽幅震荡
- 数据库JDBC操作辅助类
- 判断当前应用是否在后台运行
- Boost学习笔记 -- 字符串与文本处理