Aizu ALDS1_2_D Shell Sort(希尔排序)
2016-12-05 20:06
465 查看
#include <bits/stdc++.h> #define _ ios_base::sync_with_stdio(0);cin.tie(0); #define INF 0x3f3f3f3f #define eps 1e-5 typedef long long LL; const double pi = acos(-1.0); const long long mod = 25 * 1E8; using namespace std; int a[1000005]; LL cnt; int l; int N; vector<int> G; void insertionSort(int g,int N) { for(int i = g;i < N;i++) { int v = a[i]; int j = i - g; while(j >= 0 && a[j] > v) { a[j + g] = a[j]; j -= g; cnt++; } a[j + g] = v; } } void shellSort(int N) { int h = 1; while(1) { //if(h > N) //break; //printf("h = %d,N = %d\n",h,N); G.push_back(h); h = 3 * h + 1; if(h > N) break; } for(int i = G.size() - 1;i >= 0;i--) insertionSort(G[i],N); } int main() { //freopen("input.txt","r",stdin); //freopen("output.txt","w",stdout); ios_base::sync_with_stdio(0);cin.tie(0); int N; cin >> N; //printf("N = %d\n",N); for(int i = 0;i < N;i++) cin >> a[i]; cnt = 0; shellSort(N); cout << G.size() << endl; for(int i = G.size() - 1;i > 0;i--) printf("%d ",G[i]); printf("%d\n",G[0]); printf("%d\n",cnt); for(int i = 0;i < N;i++) printf("%d\n",a[i]); return 0; }
相关文章推荐
- 希尔排序(shell sort)
- 无聊写排序之 ---- 希尔排序(ShellSort)
- 希尔排序(shell sort):c++
- 【每日一题(25)】初等排序算法(2) 希尔排序(shell sort)
- 希尔排序(Shell Sort)——插入排序法(Java实现)
- 排序——希尔排序(Shell Sort)
- 算法----希尔排序(shell sort)
- [排序] 希尔排序(Shell Sort)
- 希尔排序(Shell Sort)
- 希尔排序(shellsort)算法实现
- 用java 和 python将希尔排序Shell's Sort 的每一步打印出来(每次的增量没有固定规则)
- 【排序算法 】希尔排序 shell sort(插入类排序)
- 排序算法之希尔排序(ShellSort)
- 常见排序算法 - 希尔排序 (Shell Sort)
- 排序算法-希尔排序 Shell Sort
- 希尔排序(shellsort)算法实现
- 希尔排序(Shellsort)简介
- 希尔排序(shellsort)
- PHP排序算法之希尔排序(Shell Sort)实例分析
- 插入排序之希尔排序(Shell Sort)