数据结构总结之sort(排序)
2017-12-16 10:51
190 查看
1.反转int数组:
2.输入的int数组不知道元素个数,用vector+getchar()
3.next_permutation生成由当前字符组成的比当前字符串略大的字符串赋值给当前字符串,有点绕口哈!若失败,返回false。
输入:
abaabc
输出:
abaacb
ababac
4.求逆序数&&归并排序
5.结构体的比较大小
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 4000 [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; }
相关文章推荐
- 排序总结系列九:计数排序(Counting sort)
- JS中的算法与数据结构——排序(Sort)
- 各种排序(数据结构复习之内部排序算法总结)
- 1015.德才论(25)——标准库排序总结(sort)
- 数据结构中的各种排序---总结篇
- 数据结构--排序总结
- 排序算法总结(二)归并排序【Merge Sort】
- 数据结构学习系类列十六-排序总结篇
- 数据结构 - 只需选择排序(simple selection sort) 详细说明 和 代码(C++)
- 数据结构各种排序java实现个人总结
- 数据结构的排序总结
- 数据结构-链表排序总结
- python 排序总结reverse sort sorted
- 关于数据结构三种简单的排序总结
- 数据结构排序总结
- C++ sort 排序(降序、升序)使用总结
- 数据结构几类排序的总结和完整代码 待续。。
- 数据结构第十章 排序 总结
- 2018_蓝桥_sort()函数_排序函数总结
- hadoop的terasort排序总结