博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
排序算法及分析(插入、希尔、选择、冒泡)
阅读量:6948 次
发布时间:2019-06-27

本文共 1327 字,大约阅读时间需要 4 分钟。

  假如我们要从小到大排序,下面几种简单的算法可以处理规模不大的数据,我写成函数形式。

一、插入排序

  思想就是:从左到右对每个数,每次在它前面找到一个合适的位置把它插进去。

void InsertSort(int a[],int n){    int i,j,key;    for(i=2;i<=n;i++){        key=a[i];        for(j=i-1;j&&key

 

  C是比较次数,M是移动次数,则

  最好情况$C_{min}=n-1$,$M_{min}=0$;

  最坏情况$C_{max}=(n+2)*(n-1)/2$,$M_{max}=\frac{(n+4)(n-1)}{2}$

  随机情况$C_{avg}=(C_{min}+C_{max})/2 \approx n^2/4$,$M_{avg}\approx n^2/4$

 

  折半插入排序,找插入位置时可以二分。

  表插入排序:基于链表存储。

  希尔排序:

    1)按增量d分组。

    2)每组用直接插入排序。

    3)然后减小d(有一个增量序列,比如..15,7,3,1),回到1),最后一次d为1。  

int dlta[5]={
15,7,3,1};void ShellSort(int a[],int n){ int i,j,k,key; for(k=0;k<4;k++){ int dk=dlta[k]; for(i=1+dk;i<=n;i++){ key=a[i]; for(j=i-dk;j&&key

 

  

二、选择排序

  思想是:每次找未排序的部分(i到n)最小的,和第i个交换。

void SelectSort(int a[],int n){    int i,j,Min,t;    for(i=1;i

 

  比较次数 $C=n(n-1)/2$

  移动次数  $M_{max}=3(n-1),M_{min}=0$

  改进:树形选择排序(锦标赛排序)

    是稳定排序。

    时间复杂度$O(nlog_2n)$

    辅助空间较多。

三、冒泡排序

  思想:每次从左到右将每对相邻的且逆序的数交换,可以使未排序的最大的数放到未排序数的最后。

void BubbleSort(int a[],int n){
//a数组下标1~n int i,j,temp; bool sorted; for(i=1; i
a[j+1]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; sorted=false; } } }}

 

  

调用:

cin>>n;for(int i=1; i<=n; i++)    cin>>a[i];BubbleSort(a,n);

 

  

转载地址:http://pwuil.baihongyu.com/

你可能感兴趣的文章
走进青音的世界
查看>>
linux下解压缩rar格式的文件压缩包
查看>>
ButterKnife的安装与使用以及ButterKnife右键不显示的大坑
查看>>
mysql初始化登录报错解决-1
查看>>
zabbix-agent-for-Debian
查看>>
如何查看所安装的jdk的版本位数
查看>>
软件包管理
查看>>
Ansible入门
查看>>
python字符类型
查看>>
html中文本域选中后会出现蓝边框
查看>>
Hadoop组件启动的三种方式及配置SSH无密码登入
查看>>
docker管理神器—kubernetes—直接路由篇
查看>>
卡西欧(casio)手表设置指南
查看>>
JDBC学习总结4-------简化DAO的写法
查看>>
IIS下安装php5.3
查看>>
Linux 下安装 jdk-7u75-linux-x64.gz,jdk1.7.0_75,jdk1.7步骤:
查看>>
文件和目录属性ls which alias
查看>>
ubuntu安装时出现11:资源暂时不可用
查看>>
集合Collections,List
查看>>
Git 远程仓库(Github)
查看>>