算法学习笔记(三)-----各种基础排序问题
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
算法学习笔记(三)-----各种基础排序问题相关推荐
- 大数据HiveSQL学习笔记三-查询基础语法以及常用函数
大数据HiveSQL学习笔记三-查询基础语法以及常用函数 一.基础语法 1.SELECT -列名- FROM -表名- WHERE -筛选条件- 如:需要根据城市,性别找出匹配的10个用户 user_ ...
- 密码算法学习笔记01:基础知识-公钥密码和混合密码系统
来自书籍<图解密码技术 第三版.pdf> 密码算法基础知识-公钥密码和混合密码系统 一.公钥密码 公钥密码--用公钥加密,用私钥解密. 公钥密码无需向接收者配送用于解密的钥匙,只需向发送者 ...
- Java基础学习笔记三 Java基础语法
Scanner类 Scanner类属于引用数据类型,先了解下引用数据类型. 引用数据类型的使用 与定义基本数据类型变量不同,引用数据类型的变量定义及赋值有一个相对固定的步骤或格式. 数据类型 变量名 ...
- c++学习笔记三-常见基础问题
1.windows系统下标准输入的fd是多少? coder: windows下console没有所谓的0,1,2标准输入输出fd这样的概念.windows下的进程创建时默认是没有这些输入输出的,可以在 ...
- 【基础】基础算法学习笔记(状态空间)
基础算法学习笔记(状态空间) 一.状态空间 1.定义(什么是状态空间):一个实际问题的各种可能情况构成的集合.(解释:为什么需要算法来和程序来处理问题?如果一道题可以手算得到答案,换句话说就是存在通过 ...
- J2EE学习笔记三:EJB基础概念和知识 收藏
J2EE学习笔记三:EJB基础概念和知识 收藏 EJB正是J2EE的旗舰技术,因此俺直接跳到这一章来了,前面的几章都是讲Servlet和JSP以及JDBC的,俺都懂一些.那么EJB和通常我们所说的Ja ...
- 家族关系查询系统程序设计算法思路_【学习笔记】数据库基础 - 查询优化
目录 什么是数据库查询优化? 影响查询优化的因素 优化策略概述 查询优化的总体思路 语义优化 -- 内容等价性 语法优化(逻辑层优化)---语法等价性 执行优化(物理层优化) 查询优化在DBMS中的位 ...
- Python基础学习笔记三
Python基础学习笔记三 print和import print可以用,分割变量来输出 import copy import copy as co from copy import deepcopy ...
- Timo学习笔记 :Python基础教程(第三版)第四章 当索引行不通时
第四章 当索引行不通时 Timo学习笔记 :Python基础教程(第三版)第三章 使用字符串 这是word编辑的最后一章笔记,第五章开始将直接用这个模板记录. 本章笔记很少,也很简单.很多方法可以到要 ...
- GEE (Google Earth Engine)最基础代码学习笔记三
GEE (Google Earth Engine)代码学习笔记三 本次学习核心为:将JavaScript objects and primitives放入Earth Engine 容器传到服务器,并处 ...
最新文章
- windows 将python源代码加密_对源代码进行pyd加密
- [Tarjan][割点] 洛谷 P3469 BLO-Blockade
- CTFshow 反序列化 web263
- JQUERY的html()
- gwt格式_GWT的渐进式Web应用程序配方
- Eclipse中的Tomcat:6个流行的“如何做”问题
- Invalid Gradle JDK configuration found_带你了解Gradle编译速度是如何提升70%的
- VueRouter源码分析
- Redis基准测试火焰图 | 附 svg矢量图
- Server系列18:如何通过组策略赋予domain user受限网络管理权限?
- 安徽省级办公室高级应用计算机二级,2019年9月安徽省计算机等级二级考试教程:二级MSOffice高级应用上机指导...
- SCSA---信息安全概述
- 关闭文件和打印机共享服务器,网络发现自动关闭、无法启用文件和打印共享的解决办法...
- 路由与交换技术考试常见问答
- Halo博客 -- ③ 本地运行
- Kubeenetes Dashboard admin-kubeconfig
- 实测搭建学法减分助手小程序系统源码
- 音乐复兴:发烧友的耳朵有救了
- RHEL8.0快速入门系列笔记--理论知识储备(一)
- 越吃越年轻的26种抗衰老食物
热门文章
- 幂等和高并发在电商系统中的使用
- 鸡啄米MFC教程笔记之七:对话框:为控件添加消息处理函数
- 设计模式学习笔记九:原型模式(Prototype Pattern)
- Apache、Nginx、Tomcat的区别
- h5是什么 www.php.cn,html meta标签的作用是什么?
- python反编译exe_实战 Python3.7+64位 Exe 反编译
- android web3j 代币查询_Android通过web3j以太坊智能合约交互
- APP技巧:电脑登录微信,要删除这5个文件!否则别人能查看聊天记录
- 电脑软件:巧用微软小工具解决日常问题!
- ip访问php $_files空,PHP中表单没有问题但$_FILES为空怎么办?