第三章 ALDS1_2_D:Shell Sort 希尔排序法
来源:互联网 发布:windows怎么重启tomcat 编辑:程序博客网 时间:2024/05/22 06:44
知识点
希尔排序法是基于插入排序法
每次以间隔为g的元素为对象进行的插入排序,然后不断缩小g,然后继续插入排序,直到g=1.
小结
时间复杂度是
O(n1.25) ,空间复杂度为O(n) ,是不稳定排序。
问题链接
ALDS1_2_D:Shell Sort
问题内容
输出g的选择数量,然后输出g数组,然后输出交换次数,最后输出排序后的结果。
思路
根据数量n生成g数组,然后通过g数组逆序进行希尔排序
代码
#include<iostream>#include<cstdio>#include<vector>using namespace std;//g数组vector<int>G;long long cnt;int A[1000000 + 10];// 间隔为g的插入排序void insertionSort(int A[], int n, int g) { 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 A[], int n) { for (int i = G.size() - 1; i >= 0; i--) { insertionSort(A, n, G[i]); }}// 生成g数组void getArray(int n) { for (int h = 1; h <= n;) { G.push_back(h); h = 3 * h + 1; }}int main() { int n; scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d", &A[i]); getArray(n); shellsort(A,n); int len = G.size(); printf("%d\n", len); for (int i = len - 1; i >= 0; i--) printf("%d%c", G[i], i == 0 ? '\n' : ' '); printf("%lld\n", cnt); for (int i = 0; i < n; i++) printf("%d\n", A[i]); return 0;}
阅读全文
0 0
- 第三章 ALDS1_2_D:Shell Sort 希尔排序法
- Aizu ALDS1_2_D Shell Sort(希尔排序)
- Shell Sort 希尔排序
- 希尔排序(Shell Sort)
- 希尔排序(Shell Sort)
- 希尔排序(Shell Sort)
- 希尔排序(Shell Sort)
- 希尔排序/shell sort
- 希尔排序(Shell Sort)
- 希尔排序 shell sort
- 希尔排序Shell Sort
- 希尔排序(shell sort)
- 希尔排序Shell sort
- 希尔排序 shell sort
- 希尔排序Shell sort
- 希尔排序shell sort
- Shell Sort 希尔排序
- 希尔排序 shell sort
- python 笔记 更多的变量和字符串(string) ——12.22
- CSS实现网页背景图片自适应全屏
- C# 文件操作(全部) 追加、拷贝、删除、移动文件、创建目录 修改文件名、文件夹名
- SqlServer2008R2 分区管理
- cv::pyrMeanShiftFiltering 和 cuda::meanShiftSegmentation源码阅读笔记
- 第三章 ALDS1_2_D:Shell Sort 希尔排序法
- JavaScript 继承---组合继承
- Elasticsearch 基本语法汇总
- 求最短路算法的一个总结
- STM32F103RCT6控制LED
- silvaco激活
- MacbookPro 2015/2017 安装Windows10后5G信号不稳定的解决方法
- 修改MIUI9状态栏布局文件达到“iOS状态栏布局”效果
- 手工脱FSG压缩壳