数据结构总结之sort(排序)
来源:互联网 发布:注销阿里云 编辑:程序博客网 时间:2024/06/06 15:01
1.反转int数组:
void g(int t)//反转从第一个到第t个数{ for(int i=0; i<(n-t+1)/2; i++) swap(a[i],a[n-i-t]);}
2.输入的int数组不知道元素个数,用vector+getchar()
#include <bits/stdc++.h>using namespace std;vector<int> v;int n;int main(){ int tmp; while(~scanf("%d",&tmp)) { v.push_back(tmp); cout<<tmp; while(getchar()==' ') { scanf("%d",&tmp); v.push_back(tmp); cout<<' '<<tmp; } n=v.size(); cout<<endl<<"元素个数:"<<n<<endl; v.clear(); } return 0;}
3.next_permutation生成由当前字符组成的比当前字符串略大的字符串赋值给当前字符串,有点绕口哈!若失败,返回false。
#include <bits/stdc++.h>using namespace std;int main(){ string s; while(cin>>s) { if(s=="#") break; int n=(int)s.length(); if(next_permutation(s.begin(),s.begin()+n)) cout<<s<<endl; else cout<<"No Successor"<<endl; }}
输入:
abaabc
输出:
abaacb
ababac
4.求逆序数&&归并排序
#include <iostream>#include <stdio.h>//error: reference to 'left' is ambiguous|把left换成left_就好了using namespace std;const int maxn=500010;const int INF=0x7fffffff;int s[maxn],left_[maxn],right_[maxn];long long ans;void compute(int l,int r){ int mid=(l+r)/2; int left__len=mid-l+1; int right__len=r-mid;//不可以化简成(r-l)/2,建议还是写成r-mid int i; for( i=1; i<=left__len; i++) left_[i]=s[l+i-1]; left_[i]=INF;//设置无穷上界,避免比较大小时越界 for( i=1; i<=right__len; i++) right_[i]=s[l+left__len+i-1]; right_[i]=INF;//设置无穷上界,避免比较大小时越界 i=1; int j=1; for(int k=l; k<=r;) { if(left_[i]<=right_[j]) s[k++]=left_[i++]; else { s[k++]=right_[j++]; ans+=left__len-i+1;//left_数组中,if(left_[i]<=right_[j]),left_[i+t]都是小于right_[j]的(t=1,2,3……) } }}void mergesort(int l,int r){ if(l<r) { int mid=(l+r)/2;//一般左边的长度>=右边的 mergesort(l,mid); mergesort(mid+1,r); compute(l,r); }}int main(){ int n; while(~scanf("%d",&n)&&n) { for(int i=1; i<=n; i++) scanf("%d",&s[i]); ans=0; mergesort(1,n); printf("%lld\n",ans); }}
5.结构体的比较大小
#include <bits/stdc++.h>using namespace std;string s;struct ch{ char c; int cnt; bool operator <(const ch tmp)const { if(tmp.cnt==cnt) return tmp.c>c; return cnt>tmp.cnt; }}c[26];int main(){ int n; scanf("%d",&n);getchar(); for(int i=0;i<26;i++) { c[i].c=(char)(i+'A'); c[i].cnt=0; } while(n--) { getline(cin,s); for(int i=s.length()-1;i>=0;i--) { if(s[i]<='z' && s[i]>='a') { c[s[i]-'a'].cnt++; } else if(s[i]<='Z' && s[i]>='A') c[s[i]-'A'].cnt++; } } sort(c,c+26); for(int i=0;i<26;i++) { if(c[i].cnt!=0) cout<<c[i].c<<" "<<c[i].cnt<<endl; } return 0;}
阅读全文
0 0
- 数据结构总结之sort(排序)
- 【数据结构】内部排序之快速排序(Quick Sort)
- 数据结构实验之排序三:bucket sort
- 数据结构实验之排序三:bucket sort
- 数据结构实验之排序三:bucket sort
- 数据结构实验之排序三:bucket sort
- 数据结构实验之排序三:bucket sort
- 数据结构实验之排序三:bucket sort
- 数据结构实验之排序三:bucket sort
- 数据结构实验之排序三:bucket sort
- 数据结构实验之排序三:bucket sort
- 数据结构实验之排序三:bucket sort
- 数据结构实验之排序三:bucket sort
- 数据结构实验之排序三:bucket sort
- 数据结构实验之排序三:bucket sort
- 数据结构实验之排序三:bucket sort
- 数据结构实验之排序三:bucket sort
- 数据结构实验之排序三:bucket sort
- 0xC0000005: 读取位置 0x00000000 时发生访问冲突
- jdbcTemplate在执行插入操作的时候如何判断是否插入成功?
- Java BigDecimal详解 运算
- CentOs 设置IP/HostName 方法
- (ssl 1597 洛谷 1880)石子合并
- 数据结构总结之sort(排序)
- Linux电源管理(5)_Hibernate和Sleep功能介绍
- 浅谈ArcGIS中的容差和分辨率
- 使用easyNVR与easyDSS时遇到的一些问题
- cocos2d 扑克发牌动画
- Linux电源管理(4)_Power Management Interface
- spring boot(23)-文件上传与下载
- 传统应用程序该不该迁移?看完这3点你就知道了!
- 传统应用程序上传至云端运行的经典案例,分步计划帮您逐步提升效率!