• 随机生成数组

#include <iostream>
#include <algorithm>
#include<ctime>
#include<time.h>
#include<cstdlib>using namespace std;const int maxn=1e4+7;
int arr[maxn];int main(int argc, const char * argv[]) {int n;srand(time(NULL));cout<<"请输入生成随机数组的个数:";cin>>n;if(n<1||n>maxn)//判断数据个数{cout<<"数据错误!"<<endl;exit(EXIT_FAILURE);//不满足则程序终止}for(int i=0;i<n;i++)//随机数组生成{arr[i]=rand()%100;//rand()为c++随机函数cout<<arr[i]<<" ";//输出}cout<<endl;
  • shell sort 希尔排序
//第二步 进行shellsortint gap=0;//初始值 排序步长gap=0for(gap=n/2;gap>0;gap/=2)//希尔排序的排序步长依次是n/2 n/4 n/8…… 直到1【n/(2的x次方)】{//比如 n=10 那么第一次大循环 gap=5for(int i=gap;i<n;i++)//最后一组的所有数据都和相同间隔前的数据进行比较{//比如 arr[5]和arr[0]比较 arr[6]和arr[1]比较…………for(int j=i-gap;j>0&&arr[j+gap]<arr[j];j-=gap)/*j=i-gap 代表第一组arr与第二组比较(这是第一次循环)j-=gap 代表再与后面各组比较限制条件是 j>0 交换条件是后面比前面小*/swap(arr[j],arr[j+gap]);}}
  • 选择排序
//第二步 进行选择排序for(int i=0;i<n-1;i++)//待比较数0--n-1遍历{int minn=arr[i];//最小值和下标初始化int vis=i;for(int j=i+1;j<n;j++)//待比较数与后面的数 遍历比较{if(arr[j]<arr[vis])//数据大小比较{minn=arr[j];//赋值vis=j;}}if(vis!=i)//交换swap(arr[vis],arr[i]);}
  • 时间复杂度
    希尔排序的时间复杂度为O(n^(1.3—2)),平均时间复杂度为O(nlog2n)。
    选择排序的时间复杂度为O(n^2)。
    由表格可知,希尔排序速度快于选择排序,时间复杂度低于选择排序,而两者的空间复杂度相同。

数据结构第一课:希尔排序和选择排序的时间复杂度随机数组的生成相关推荐

  1. 数据结构—排序算法总结(插入排序、希尔排序、选择排序、堆排序、冒泡排序、快速排序、合并排序、计数排序)

    *排序 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作. 稳定性 在待排序的数组中,如果出现多个相同的关键字,例如:98751555512,中出现重复的数字,在 ...

  2. C语言——十四种内部排序算法【直接插入排序-冒泡排序-选择排序-插入排序-希尔排序-归并排序-快速排序-堆排序-折半插入排序-二分查找-路插入排序-表插入排序-简单选择排序-直接选择排序-树形选择】

    目录: 一:插入排序 A:直接插入排序 1.定义: 2.算法演示 实例1: 3.基本思想 4.排序流程图 实例1: B:希尔排序 1.定义: 2.算法演示 实例2: C:其他插入排序 a:折半插入排序 ...

  3. 八大排序:冒泡排序、插入排序、希尔排序、选择排序、堆排序、归并排序、快速排序、基数排序

    [前言] 所有代码段都以升序为例,数组下标从0开始.排序的稳定性即:任意两个相等的数据,排序前后的相对位置不发生变化. [冒泡排序(Bubble Sort)] 它重复地访问过要排序的元素序列,依次比较 ...

  4. 【八大排序详解~C语言版】直接插入排序-希尔排序- 直接选择排序-堆排序-冒泡排序-快速排序-归并排序-计数排序

    八大排序 1.直接插入排序 2.希尔排序 3.直接选择排序 直接选择排序改进 4.堆排序 1.建堆 2.利用堆删除思想来进行排序 5.冒泡排序 6.快速排序 递归实现 非递归实现 7.归并排序 递归实 ...

  5. 排序算法(分类,时间复杂度)(快速排序,插入排序,希尔排序,选择排序,冒泡排序)

    1.排序算法 1.排序的分类 分为内部排序和外部排序,其中内部排序分为插入排序.选择排序.交换排序.归并排序和基数排序.插入排序包括直接插入排序和希尔排序:选择排序包括简单选择排序和堆排序:交换排序包 ...

  6. 常见排序算法详解(插入排序、希尔排序、选择排序、冒泡排序、快速排序)

    1.1 插入排序 步骤: 1.从第一个元素开始,该元素可以认为已经被排序 2.取下一个元素tem,从已排序的元素序列从后往前扫描 3.如果该元素大于tem,则将该元素移到下一位 4.重复步骤3,直到找 ...

  7. C语言排序算法 选择排序 插入排序 快速排序 qsort实现快排 堆排序

    常见排序算法 选择排序 选择排序(Selection sort)是一种简单直观的排序算法. 它的工作原理如下. 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素 ...

  8. 十大经典排序算法-选择排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  9. 排序算法---选择排序(java版)

    简单选择排序 原理 选择排序(Selection Sort)的原理有点类似插入排序,也分已排序区间和未排序区间.但是选择排序每次会从排序区间中找到最小的元素,将其放到已排序区间的末尾. 简单选择排序执 ...

最新文章

  1. getElementById 使用
  2. ceph osd 由于“No space left on device” 异常down,通过扩容文件系统或者显式运行osd进程解决
  3. pytorch torch.device类(表示在其上或将要分配torch.Tensor的设备)
  4. 【面试招聘】 美团提前批通关之旅
  5. boost::spirit模块使用 phoenix 对逗号分隔的数字列表求和的解析器
  6. Mysql自增列,并发插入时导致死锁的问题
  7. oracle 触发器登录,【学习笔记】Oracle触发器 实现指定用户登录oracle案例
  8. vertx rest 跨域_Vertx编程风格:您的React式Web Companion REST API解释了
  9. 10问10答:你真的了解线程池吗?
  10. 关于逻辑或的一个小小应用注意点
  11. 三容水箱液位控制系统_过程控制实验-三容水箱液位控制系统
  12. html字体样式美化,css美化文字做法详解总结
  13. win10装inventor哪个版本_超详细!高效电脑装系统教程
  14. kdj指标详解曲线详解分析高位徘徊是什么KDJ指标详解曲线详解分析市场特征是什么
  15. 惠普打印机WiFi连接使用
  16. CTFshow 2022 菜狗杯 WEB WP补充
  17. 西门子博途1200码垛机、立体仓库程序(带注释),程序应用到 变频器、触摸屏、步进电机、工业机器人、视觉相机。
  18. 域环境批量推送OUTLOOK签名
  19. 紫外可见分光光度计 | 探索光的工具 | 详解
  20. 腾讯地图位置搜索,标记

热门文章

  1. 石油大学计算机第二阶段在线作业答案,中国石油大学计算机应用基础第二阶段在线作业答案2018年.docx...
  2. 1.markdown基础语法
  3. 19 - Dva框架基础
  4. 学习日志——2019/07/04
  5. b、B、KB、MB、GB 的关系?
  6. 程序员撩妹指南-抖音爆火3D相册
  7. 数据挖掘神经网络算法,人工神经网络分析方法
  8. 为远程群晖NAS的自定义域名配置SSL证书
  9. iphone 中的键盘切换产生的屏幕大小问题
  10. 旗下企业永远不会超过七家 马云