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

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

一、直接插入排序:是最简单的排序方法,算法简单来说就是可以把第一个数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时,其复杂度为On3/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;

}

}

}

}

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

    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)“可任意选。通常把第一个数字作为枢轴,划分成两个区域后,再各自划分,不断递归,最后就剩两个或三个数字的区域,就很简单就能排列出来了。(不过代码还是稍微纠结了一下才写出来啊。。。)栈的最大深度可降为Ologn

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/291533.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

mac之把打开终端设置快捷键为Ctrl+Alt+T

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程 1、在Automator.app中创建一个AppleScript Finder&#xff0d;>应用程序->Automator打开Automator.app&#xff0c;打开Automator后…

基础磁盘管理

一、设备文件Linux中设备类型分为字符设备与块设备&#xff0c;他们特点分别为&#xff1a;块设备特性&#xff1a;以“块”为单位进行存取&#xff0c;随机访问&#xff0c;例如磁盘字符设备特性&#xff1a;以“字节”单位进行存取&#xff0c;线性访问&#xff0c;例如键盘设…

HTML5 Canvas 画纸飞机组件

纸飞机模拟一个物体在规定设计轴线偏离方位。 1 //三角形2 function DrawTriangle(canvas, A, B, C) {3 //画个三角形,“A、B、C”是顶点4 with (canvas) {5 moveTo(A[0], A[1]);6 lineTo(B[0], B[1]);7 lineTo(C[0], C[1]);8 lineTo(…

OPPO R9凭创新赢得2000万销量,成2016年热销手机

2016年的手机市场虽然新闻不断但是整体状况并没有以往那么好&#xff0c;各方数据显示&#xff0c;2016年全年全球智能型手机出货量仅有2.3%的微幅增长&#xff0c;虽然中国市场的全年出货量通同比增长6%&#xff0c;但是比往年也大有不如&#xff0c;手机市场已从增量市场进入…

windows7 nginx php mysql_windows7配置Nginx+php+mysql的详细教程

最近在学习php&#xff0c;想把自己的学习经历记录下来&#xff0c;并写一些经验&#xff0c;仅供参考交流。此文适合那些刚刚接触php&#xff0c;想要学习并想要自己搭建Nginxphpmysql环境的同学。当然&#xff0c;你也可以选择集成好的安装包&#xff0c;比如 wamp等&#xf…

基于C#的计时管理器

问题我们使用各种系统时候会遇到以下问题&#xff1a;12306上购买火车票如果15分钟内未完成支付则订单自动取消。会议场馆预定座位&#xff0c;如果10分钟内未完成支付则预定自动取消。在指定时间之后&#xff0c;我需要执行一项任务。我之前做的很多系统&#xff0c;往往都是定…

HDU 2516 (Fabonacci Nim) 取石子游戏

这道题的结论就是&#xff0c;石子的个数为斐波那契数列某一项的时候&#xff0c;先手必败&#xff1b;否则&#xff0c;先手必胜。 结论很简单&#xff0c;但是证明却不是特别容易。找了好几篇博客&#xff0c;发现不一样的也就两篇&#xff0c;但是这两篇给的证明感觉证得不清…

access的ole对象换成mysql_ACCESS的Ole对象读取写入

Ole对象在Access中存储为二进制文件&#xff0c;读取的时候需要注意转换出的文件的编码格式1OleDbConnection OleConnnewOleDbConnection();2OleConn.ConnectionString"ProviderMicrosoft.Jet.OleDb.4.0;data sourceD:\WorkStation\Dialy_Sol\Dialy\Dialy.mdb";3OleD…

ABP vNext微服务架构详细教程——分布式权限框架(上)

1简介ABP vNext框架本身提供了一套权限框架&#xff0c;其功能非常丰富&#xff0c;具体可参考官方文档&#xff1a;https://docs.abp.io/en/abp/latest/Authorization但是我们使用时会发现&#xff0c;对于正常的单体应用&#xff0c;ABP vNext框架提供的权限系统没有问题&…

前端每隔几秒发送一个请求

2019独角兽企业重金招聘Python工程师标准>>> <html><head><SCRIPT LANGUAGE"JavaScript"> var timer;//声明一个定时器 var count 0; function test() { //每隔500毫秒执行一次add()方法 timer window.setInterval("add()"…

element 表单回显验证_关于vue el-form表单报错的问题

在写el-form表单的时候&#xff0c;遇到了蛮多问题&#xff0c;在这里记录一下。1.表单验证报错[Element Warn][Form]model is required for validate to work!初始代码如下&#xff1a;<!-- 表单部分 --> <el-formref"inputForm"size"mini"inlin…

我做了一个 Istio Workshop,这是第一讲介绍

我是 Jimmy Song[1]&#xff0c;Tetrate 布道师&#xff0c;云原生社区创始人。你可以能想到为什么在这个时候创建一个 Istio 教程&#xff0c;因为市面上已经林林总总有不少关于 Istio 的书籍和教程了&#xff0c;但是我们都知道 Istio 是一个新兴技术&#xff0c;发展十分迅速…

Swoole入门指南:PHP7安装Swoole详细教程(一)

好久未更新了&#xff0c;不是懒呃&#xff0c;是太忙啦&#xff01;终于偷得浮生几日闲。这一段时间准备为大家带来swoole的入门教程&#xff0c;感受一下php的nodeJs强悍之处。 所有的示例代码均放在了github上&#xff1a;learn-swoole 环境 这里不在使用apache做为web serv…

C/C++之#ifdef、#if、#if defined的区别

1、看代码 2、运行结果 3、分析 #fi&#xff1a;后面接的表达式&#xff0c;如果为1就编译包含里面的内容 #ifdef&#xff1a;后面接的是一个宏&#xff0c;只要定义这个宏就行 #if defined(x)&#xff1a;和#ifdef效果一样 #if !defined(x)&#xff1a;和#ifndef效果一样

.Net Core 读取文件时中文乱码问题的解决方法

背景今天在使用core web api上传txt文档的时候本来很顺利的&#xff0c;但是一测试发现读取的中文内容是乱码的&#xff0c;很是纳闷。出于经验&#xff0c;立马把代码的Encoding.Default改成 Encoding.uft8, 发现还是不行。后面索性把上传的文件另存为下&#xff0c;特地选择带…

关于使用indexedDB的本地存储(2)

我又回来了~这几天估计没喝茶&#xff0c;每天头都晕晕的&#xff0c;昨晚上和室友看了素鸡7&#xff0c;伤心啊&#xff0c;自己一直都喜欢这个系列&#xff0c;感觉童年真的是渐行渐远了…… 上一篇说到了哪些内容我这里罗列一下 建立和打开数据库、删除数据库、判断objectSt…

BCVP开发者社区2022专属周边第一弹

BCVP TeamBCVP开发者社区是博主老张的哲学发起&#xff0c;鼓励每个人都可参与的一个分享社区&#xff0c;目前已经有12个参与者&#xff0c;19个开源项目。欢迎加入BCVP&#xff0c;获取专属周边礼品&#xff08;文末有介绍&#xff09;。官方博客还在筹建中&#xff0c;预计2…

C++之类模板最简单的使用

1、说明类模板 1) 声明类模板时要增加一行 template <class 类型参数名> template意思是“模板”,是声明类模板时必须写的关键字。在template后面的尖括号内的内容为模板的参数表列,关键字class表示其后面的是类型参数 2、写代码理解 3、运行结果 4、总结 上…

mysql 5.5主从同步_MySQL5.5+配置主从同步并结合ThinkPHP5设置分布式数据库

This browser does not support music or audio playback. Please play it in WeChat or another browser.前言&#xff1a;本文章是在同处局域网内的两台windows电脑&#xff0c;且MySQL是5.5以上版本下进行的一主多从同步配置&#xff0c;并且使用的是集成环境工具PHPStudy为…

C# 10的新特性

点击上方蓝字关注我们&#xff08;本文阅读所需15分钟&#xff09;我们很高兴地宣布 C# 10 作为 .NET 6 和 Visual Studio 2022的一部分已经发布了。在这篇文章中&#xff0c;我们将介绍 C# 10 的许多新功能&#xff0c;这些功能使您的代码更漂亮、更具表现力、更快。阅读 Visu…