2019独角兽企业重金招聘Python工程师标准>>>

一、直接插入排序:是最简单的排序方法,算法简单来说就是可以把第一个数a[0]看做有序数组,那么a[1]要插入进来,对比,插入合适位置;然后a[0],a[1]是有序数组,插入a[2]就依次和a[0],a[1]比较并插入,若a[2]需插在最前面,那a[0],a[1]都要依次后移。。。以此类推。所以插入排序有很多比较及交换的过程。时间复杂度为O(n2)。下面是自己编的插入排序的代码,很简单嗯:

void InsertSort(int *a,int length)

{

int temp=0;

for(int i=1;i<length;i++)

{

for(int j=0;j<i;j++)

{

if(a[i]<a[j])

{

temp=a[i];

a[i]=a[j];

a[j]=temp;

}

}

}

}

二、希尔排序:也是一种插入排序,但是用简单的算法有了大的复杂度改进。简单来说就是设置了一个增量表K[]。比如有一个10个数字的数组需要排序的话,可以把增量表设置成K[3]={5,3,1}。先以增量5排序,就是把10个数字数组分区成为{R1,R6};{R2,R7};{R3,R8};{R4,R9};{R5,R10}.区域内各自使用插入排序,然后再以增量3排序,最后一定要用增量1排序,确认整体的顺序正确。这样可以因为小区域内的简单排序,确保整个数组”基本有序“,最后再进行一次校验,校验的时候就不需要过多的交换而浪费时间。但是希尔排序的复杂度很难分析,和增量序列也有关系。姑且记住当增量序列dlta[k]=2t-k+1-1时,其复杂度为O(n3/2)。

void ShellSort(int *array,int *dk,int length)

{

for(int i=0;i<sizeof(dk);i++)

{

ShellFastSort(array,dk[i],length);

}

}

void ShellFastSort(int *a,int k, int len)

{

int temp;

for(int i=0;i<k;i++)

{

for(int j=i+k;j<len;j+=k)

{

for(int m=i;m<j;m+=k)

if(a[m]>a[j])

{

temp=a[j];

a[j]=a[m];

a[m]=temp;

}

}

}

}

三、冒泡排序:经典排序算法,交换的思想。数与数依次比较,大的就往后移,第一趟排序能把最大的数交换到最后一个位置,第二趟把第二大的数字交换到倒数第二的位置。。。时间复杂度还是O(n2).

for(int j=n;j>0;j--)

{

for(int i=1;i<j;i++)

{

if(array[i-1]>array[i]){

temp=array[i];

array[i]=array[i-1];

array[i-1]=temp;

}

}

}

四、快速排序:是对冒泡排序的改进,思想简单来说,一趟排序把数字分成大数字区域和小数字区域,间隔点也就是所谓的“枢轴(pivot)“可任意选。通常把第一个数字作为枢轴,划分成两个区域后,再各自划分,不断递归,最后就剩两个或三个数字的区域,就很简单就能排列出来了。(不过代码还是稍微纠结了一下才写出来啊。。。)栈的最大深度可降为O(logn)

void FastSort(int *a,int low,int high)

{

int pivotloc=0;

if(low<high){

pivotloc=partition(a,low,high);

FastSort(a,low,pivotloc-1);

FastSort(a,pivotloc+1,high);

}

}

int partition(int *a,int low,int high)

{

int pivotkey=a[low],temp;

while(low<high){

while(low<high&&a[high]>=pivotkey){high--;}

if(low<high)

a[low++]=a[high];

while(low<high&&a[low]<=pivotkey){low++;}

if(low<high)

a[high--]=a[low];

}

return low;

}

转载于:https://my.oschina.net/u/1475850/blog/221772

算法学习笔记(三)-----各种基础排序问题相关推荐

  1. 大数据HiveSQL学习笔记三-查询基础语法以及常用函数

    大数据HiveSQL学习笔记三-查询基础语法以及常用函数 一.基础语法 1.SELECT -列名- FROM -表名- WHERE -筛选条件- 如:需要根据城市,性别找出匹配的10个用户 user_ ...

  2. 密码算法学习笔记01:基础知识-公钥密码和混合密码系统

    来自书籍<图解密码技术 第三版.pdf> 密码算法基础知识-公钥密码和混合密码系统 一.公钥密码 公钥密码--用公钥加密,用私钥解密. 公钥密码无需向接收者配送用于解密的钥匙,只需向发送者 ...

  3. Java基础学习笔记三 Java基础语法

    Scanner类 Scanner类属于引用数据类型,先了解下引用数据类型. 引用数据类型的使用 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固定的步骤或格式. 数据类型 变量名 ...

  4. c++学习笔记三-常见基础问题

    1.windows系统下标准输入的fd是多少? coder: windows下console没有所谓的0,1,2标准输入输出fd这样的概念.windows下的进程创建时默认是没有这些输入输出的,可以在 ...

  5. 【基础】基础算法学习笔记(状态空间)

    基础算法学习笔记(状态空间) 一.状态空间 1.定义(什么是状态空间):一个实际问题的各种可能情况构成的集合.(解释:为什么需要算法来和程序来处理问题?如果一道题可以手算得到答案,换句话说就是存在通过 ...

  6. J2EE学习笔记三:EJB基础概念和知识 收藏

    J2EE学习笔记三:EJB基础概念和知识 收藏 EJB正是J2EE的旗舰技术,因此俺直接跳到这一章来了,前面的几章都是讲Servlet和JSP以及JDBC的,俺都懂一些.那么EJB和通常我们所说的Ja ...

  7. 家族关系查询系统程序设计算法思路_【学习笔记】数据库基础 - 查询优化

    目录 什么是数据库查询优化? 影响查询优化的因素 优化策略概述 查询优化的总体思路 语义优化 -- 内容等价性 语法优化(逻辑层优化)---语法等价性 执行优化(物理层优化) 查询优化在DBMS中的位 ...

  8. Python基础学习笔记三

    Python基础学习笔记三 print和import print可以用,分割变量来输出 import copy import copy as co from copy import deepcopy ...

  9. Timo学习笔记 :Python基础教程(第三版)第四章 当索引行不通时

    第四章 当索引行不通时 Timo学习笔记 :Python基础教程(第三版)第三章 使用字符串 这是word编辑的最后一章笔记,第五章开始将直接用这个模板记录. 本章笔记很少,也很简单.很多方法可以到要 ...

  10. GEE (Google Earth Engine)最基础代码学习笔记三

    GEE (Google Earth Engine)代码学习笔记三 本次学习核心为:将JavaScript objects and primitives放入Earth Engine 容器传到服务器,并处 ...

最新文章

  1. windows 将python源代码加密_对源代码进行pyd加密
  2. [Tarjan][割点] 洛谷 P3469 BLO-Blockade
  3. CTFshow 反序列化 web263
  4. JQUERY的html()
  5. gwt格式_GWT的渐进式Web应用程序配方
  6. Eclipse中的Tomcat:6个流行的“如何做”问题
  7. Invalid Gradle JDK configuration found_带你了解Gradle编译速度是如何提升70%的
  8. VueRouter源码分析
  9. Redis基准测试火焰图 | 附 svg矢量图
  10. Server系列18:如何通过组策略赋予domain user受限网络管理权限?
  11. 安徽省级办公室高级应用计算机二级,2019年9月安徽省计算机等级二级考试教程:二级MSOffice高级应用上机指导...
  12. SCSA---信息安全概述
  13. 关闭文件和打印机共享服务器,网络发现自动关闭、无法启用文件和打印共享的解决办法...
  14. 路由与交换技术考试常见问答
  15. Halo博客 -- ③ 本地运行
  16. Kubeenetes Dashboard admin-kubeconfig
  17. 实测搭建学法减分助手小程序系统源码
  18. 音乐复兴:发烧友的耳朵有救了
  19. RHEL8.0快速入门系列笔记--理论知识储备(一)
  20. 越吃越年轻的26种抗衰老食物

热门文章

  1. 幂等和高并发在电商系统中的使用
  2. 鸡啄米MFC教程笔记之七:对话框:为控件添加消息处理函数
  3. 设计模式学习笔记九:原型模式(Prototype Pattern)
  4. Apache、Nginx、Tomcat的区别
  5. h5是什么 www.php.cn,html meta标签的作用是什么?
  6. python反编译exe_实战 Python3.7+64位 Exe 反编译
  7. android web3j 代币查询_Android通过web3j以太坊智能合约交互
  8. APP技巧:电脑登录微信,要删除这5个文件!否则别人能查看聊天记录
  9. 电脑软件:巧用微软小工具解决日常问题!
  10. ip访问php $_files空,PHP中表单没有问题但$_FILES为空怎么办?