当前位置: 首页 > 编程日记 > 正文

数组与纠结的排序篇

       数组之纠结的排序

1.数组是什么?

  • 数组所谓数组,就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。数组是在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来的一种形式。这些按序排列的同类数据元素的集合称为数组。 
  • 数组在之前的画图工具中也有使用到,主要是利用数组来存储数据,实现重绘和添加多个功能和颜色按钮。使用的比较多的是一维数组和二维数组;一维数组比较好理解,而二维数组就好像是多个一维数组的集合。例如:a[i][j],则可以看做是有i个一维数组,每个一维数组下面又有j个元数;也可以理解为一个表格:i表示行,j表示在每一行下面的列。

2.数组的基本用法:

  • 数组的定义:要定义一个数组,就必须要给定数组的长度;数组的定义方式有几种:
  1. 直接在定义的时候就给数据:

    数据类型 [] 数组名 = {数据,...};  例如: int[] a = { 6, 7, 9, 3, 2, 1, 8, 4, 5, 10 }  二维数组:数据类型 [][] 数组名 = {{数据,...},...}; 

  2. 定义的时候给数组的长度,没有具体的数据:数据类型 [] 数组名 = new 数据类型[长度];         二维数组   :数据类型 [][] 数组名 = new 数据类型[行数][列数] ;    例如:public Shape[] Sh = new Shape[10000];
  • 数组的使用:数组是属于Java的引用类型(对象类型)。也就是说,你定义一个数组,也就是相对于定义了一个对象;而数组又和其他的对象有区别;数组对象只有一个唯一的属性length,用来表示数组对象能存储的数据总数。
  1. 一维数组:数组名.length
  2. 二维数组:行的长度:数组名.length
  3. 二维数组:列的长度:数组名[i].length
  4. 二维数组:所有的元素总数:行的长度(数组名.length)*列的长度(数组名[i].length)这是当列的长度相等的情况;                                                                     不相等时,只能是所有的列的长度相加:数组名[行下标].length+...

2.数组的排序:

1.冒泡排序:

  • 冒泡排序算法的运作如下:
  1. 有n个数进行排序,则要进行n-1次循环;
  2. 每次循环都从数组的第一个数开始循环,每次循环都会把一个最大的数浮上来
  3. 在每次的循环中都要进行相同的步骤: 相连的数之间进行比较,如果前一个数大于后一个数,则交换,然后接着和下一个数进行比较,同样如果大于下一个数的话,就把它往后放,直到最后一个数;
  4. 程序代码:
    public int[] maopaopaixu(int j) {for (int i = 0; i < a.length - 1; i++) {int c = a[i];int z = i;z++;int x = a[z];if (c > x) {a[i] = x;a[z] = c;}    }j++;if (j < a.length)return maopaopaixu(j);return a;}

2.快速排序:

  • 快速排序(Quicksort)是对冒泡排序的一种改进。基本思想是,通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。
  • 快排写的有些纠结。之前是确定了一个中点,在排序之前就把数组分成了两部分,但是通过一次排序,最后都没有使其中一部分的所有数据都比另外一部分的所有数据都要小;中点前面会有比它大的数或者是后面有比它小的数;
  • 学到的思路是一趟循环:以第一个数作为比较的点,从数组的两边right,left,分别来就比较,先从数组的右边(数组的末尾)right开始往前找,找到一个比他小,放在当前left的位置,然后在改变left的值,开始在左边往后找,找一个比他大的数,放在left的位置。直到分成了两边,在left=right的时候停止,把作为比较的那个点的值放在left=right的这个值;如图
  • 代码:
        public void quicksort(int n[], int left, int right) {int dp;// 中间值;if (left < right) {dp = partition(n, left, right);// 将数组分为两部分,dp前面的数为小于dp的数,dp后面为大于dp的数;quicksort(n, left, dp - 1);// 将数组的前部分进行排序,quicksort(n, dp + 1, right); // 将数组的后部分进行排序
            }// 整个递归直到left不小于right的时候结束;
    }public int partition(int n[], int left, int right) {int pivot = n[left];// 整个循环直到left不小于right的时候结束;while (left < right) {while (left < right && n[right] >= pivot)right--;// 目的是找到一个比pivot小的数;if (left < right)n[left++] = n[right]; /** 把n[right]的值赋给当前right的位置, 然后在left++;* n[left] = n[right]; left++;*/while (left < right && n[left] <= pivot)left++;if (left < right)n[right--] = n[left]; /** 把当前的left的值赋给n[right]之后再right--;* n[right] = n[left]; right--;*/}n[left] = pivot;// 移动pivot的位置;在循环后会有一个位置是多的,这时要把pivot放在这个位置上;return left;}

3.希尔排序:

  • 希尔排序(Shell Sort)是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。
  • 希尔排序:将无序数组分割为若干个子序列,子序列不是逐段分割的,而是相隔特定的增量的子序列,对各个子序列进行插入排序;
  •  增量的选择:在每趟的排序过程都有一个增量,至少满足一个规则 增量关系 d[1] > d[2] > d[3] >..> d[t] = 1
    (t趟排序);

  • 在弄清希尔排序前,我们先来看一下插入排序:插入排序的基本思想是:每步将一个待排序的纪录,按其关键码值的大小插入前面已经排序的文件中适当位置上,直到全部插入完为止。也就是说,插入排序是将新的数排入一个已经排好序的数列中,在这里我们可以从第一个元素开始,把第一个元素作为已经排好的数列,然后下一个数开始插入进来,排好序的之后,在又插入一个数,直到全部插入为止;如图:(j和j-1比较,如果j小于j-1,那么就交换他们的位置,加下划线的表示已经排好的数列)
  • 希尔排序也是同样的思想,不过他是不连续的把序列分成几个部分,分成相隔特定的增量的子序列,然后在进行插入排序;
  • 思路:每一次的循环都先把数列分成2个部分,将后一部分与前一部分进行比较,当后一部分的数大于前一部分的数时,进行交换;
  • 如图:(x为增量)(x所在的值与(j-x)所在的位置的值进行比较,当小于时,(j-x)所在的位置的值放到j所在的位置)
  • 代码:
    public void xierpaixu() {int c = d.length;//分组;选择增量依次为:5,2,1;for (int x = c / 2; x > 0; x /= 2) {//每个组内排序;for (int i = x; i < d.length; i++) {int temp = d[i];int j = 0;if (temp < d[j - x]) {d[j] = d[j - x];} else {break;}}d[j] = temp;}}}
  • 总的来所希尔排序和快排有些相似,可以放在一起比较理解;

4.选择排序:

  • 看过快速排序和希尔排序之后,选择排序就比较简单了。
  • 选择排序的思路:有n个数,从第一个数开始(i=0),在剩下的数中,找到一个比a[i]小,并且是在比a[i]小的数中是最小的数,然后和a[i]交换坐标。重复相同的步骤,直到序列的最后一个数;
  • 选择排序比较简单。这里就不演示了。

3.总结:

  • 这次的排序还是做了很长时间的,刚开始的时候是挺着急的,但是沉下来,沉下心来领会,就会发现还是挺有收获的,所以不急不燥,找到自己的速度。

转载于:https://www.cnblogs.com/hesi/p/5664109.html

相关文章:

ASP.NET结合COM组件发送Email

在开发电子邮件发送程序的时候&#xff0c;我们经常需要使用到相应的组件&#xff0c;其实不需要第三方的组件&#xff08;例如&#xff1a;Jmail&#xff09;照常可以做到发送Email的功能。 在系统目录&#xff08;如c:/winnt或c:/windows&#xff09;的system32子目录中可以找…

卡巴循环30天不限次数循环试用工具

本文需评论之后方可查看&#xff01; echo off title 卡巴循环30天不限次数循环试用工具 echo off echo 卡巴循环30天不限次数循环试用工具 echo. echo echo 卡巴斯基6/7/8试用过期时清除系统中使用痕迹&#xff0c;就象新系统重新安装卡巴一样 echo 1、在屏幕右下角红V卡巴图…

微软CEO纳德拉对话沈向洋:那些未来可期的计算机视觉研究与应用

编者按&#xff1a;6月16日&#xff0c;CVPR 2020 大会以全球连线的形式如期开幕。在大会的首场主题演讲中&#xff0c;微软公司 CEO 萨提亚纳德拉与微软公司前执行副总裁沈向洋进行了一场精彩的炉边对谈&#xff0c;分享了对计算机视觉、人工智能研究与应用前景的思考与展望。…

SoapUI进行REST请求,POST方法提交到数据库的数据乱码问题

一开始以为要把json字符串的key和value一个一个的加进去&#xff0c;结果总是报 300&#xff0c;参数错误&#xff0c;后来才发现&#xff08;https://www.joecolantonio.com/2013/08/31/soapui-how-to-post-json-to-a-rest-service-2/&#xff09;可以直接在下面粘贴就好了&am…

网站信息统计的简单实现过程

作者&#xff1a; pcskySQL语句如下&#xff1a; SELECT DD.SumHits, AA.CountArt, CC.WeekUpdate, BB.RegUserNumFROM(SELECT COUNT(newsid) AS CountArt FROM article) AA,(SELECT COUNT(id) AS RegUserNum FROM Admin) BB,(SELECT COUNT(newsid) AS WeekUpdate FROM(articl…

谈谈C#中类成员的执行顺序.

今天我们来谈谈C#中子类和父类中静态成员以及构造函数的执行顺序&#xff0c;这个地方向来是初学C#的人比较迷惑的地方&#xff0c;也是各大公司最喜欢拿来出面试题的地方。 下面我们分情况来分析。 1. 普通构造函数和静态构造函数的执行顺序。 对于单个的类&#xff0c;它的静…

AI 重塑 IT的 5 种方式

作者 | Stephanie Overby译者 | 火火酱&#xff0c;责编 | Carol封图 | CSDN 下载于视觉中国Gartner最新的人工智能&#xff08;AI&#xff09;hype cycle报告指出&#xff0c;AI在未来五年中CIO议程中的排名十分靠前&#xff0c;对潜在业务转型具有重要影响。然而&#xff0c;…

[原创]Gerrit中文乱码问题解决方案分享

应开发同事的要求,部署了GitlabGerritJenkins的持续集成环境. 但是发现了一个问题,Gerrit登陆后有中文乱码出现. 具体情况如下: (1)Git代码中的中文乱码处理: 为妥善解决中文编码的问题&#xff0c;对所有git repository做如下约定&#xff1a;所有文本文件都必须存储成utf8编码…

UVA 10700 Camel trading

UVA_10700我们可以猜到最大值一定是先算和后算积&#xff0c;最小值一定是先算积后算和,因为a*bc<a*(bc)。此外&#xff0c;这个题目数据有可能比较大&#xff0c;所以要采用long long int或者double来处理数据。 #include<stdio.h>#include<string.h>#include&…

在ASP.NET中操作文件的例子

利用SYSTEM.IO 名空间中的STREAMWRITER,STREAMREADER及FILE类,完成文件读、写、删除的操作。 -------------------------------------------------------------------------------- 1、写文件 writefile.aspx <% Import Namespace"System.IO" %> 引…

云原生如此重要,可惜80%的人都不知道

文 | Aholiab责编 | Carol封图 | CSDN 下载自视觉中国2020年&#xff0c;一场疫情给中国企业带来了一次「被动数字化升级」&#xff0c;很多企业第一次认识到了信息化的重要性。今天&#xff0c;数字经济已无处不在&#xff0c;根据中国信息化百人会的研究报告显示&#xff0c;…

CentOS 7 yum 安装 MySQL5.7

为什么80%的码农都做不了架构师&#xff1f;>>> 0、环境 本文操作系统: CentOS 7.2.1511 x86_64 MySQL 版本: 5.7.13 1、下载 MySQL 官方的 Yum Repository 从 MySQL 官网选取合适的 MySQL 版本&#xff0c;获取下载地址。 然后使用 wget 下载&#xff1a; [rootce…

万字长文带你入门 GCN

来源 | 阿泽的学习笔记&#xff08;ID: aze_learning&#xff09;Convolutional Neural NetworkCNN 在图像识别等任务中具有重要作用&#xff0c;主要是因为 CNN 利用了图片在其域中的平移不变性。由于图结构不存在平移不变性&#xff0c;所以 CNN 无法直接在图上进行卷积。1.1…

VS.Net中程序集的Debug版本和Release版本的区别

作者&#xff1a;未知 请作者速与本人联系前几天看到豆腐的文章介绍如何知道程序集是Debug版还是Release版&#xff0c;之前只知道某些软件从功能上有企业版、标准版之分&#xff0c;却从不知道.Net程序集还有Debug和Release之区别&#xff0c;真是惭愧学了这一年C#。然后在博…

《CLR via C#》笔记——CLR的执行模型

一&#xff0e;将源代码编译成托管代码1&#xff0c; CLR&#xff08;Common Language Runtime&#xff09;公共语言运行时是一个可由多种语言使用的“运行时”&#xff0c;CLR的核心功能&#xff08;比如内存管理&#xff0c;程序集加载&#xff0c;安全性&#xff0c;异常处理…

telnet时显示:允许更多到 telnet 服务器的连接。请稍候再试

telnet时显示&#xff1a;允许更多到 telnet 服务器的连接。请稍候再试 解决办法:windows自带telnet服务器默认的最大连接数为2&#xff0c;要想修改该设置&#xff0c;可以在命令行键入tlntadmn config maxconn要设置的连接数。最大连接数是指同一时刻内客户连接服务器的最大数…

Asp.net支持的最大上传文件大小

Asp.net的默认的最大可以上载的文件是4M,可以在web.config中配置.配置 ASP.NET HTTP 运行库设置。该节可以在计算机、站点、应用程序和子目录级别声明。 <configuration> <system.web> <httpRuntime><httpRuntime useFullyQualifiedRedirectUrl&q…

ASP.NET--Menu控件

http://www.meituan.com/r/i13110281 Menu控件提供静态和动态混合的菜单功能。在向页面添加这个控件的时候&#xff0c;开发人员可以选择将它设置为一个完全动态的菜单&#xff0c;以便整个站点的导航结构都可以显示在菜单中&#xff0c;类似于Windows的Start菜单。另一种选择是…

AI进军服装零售产业:微软小冰与特步推出定制化服装设计生产及零售平台

&#xff08;6月22日&#xff0c;北京&#xff09; 今日&#xff0c;体育用品企业特步集团与微软小冰宣布达成合作&#xff0c;依托微软小冰人工智能创造技术共同推出的定制化服装设计生产及零售平台即将上线。双方携手为消费者提供定制化图案设计&#xff0c;满足每个消费者的…

PHP如何通过Http Post请求发送Json对象数据?

因项目的需要&#xff0c;PHP调用第三方 Java/.Net 写好的 Restful Api&#xff0c;其中有些接口&#xff0c;需要 在发送 POST 请求时&#xff0c;传入对象。 Http中传输对象&#xff0c;最好的表现形式莫过于JSON字符串了&#xff0c;但是作为参数的接收方&#xff0c;又是需…

字符串截取固定长度的方法

这个函数也没有什么特别之处&#xff0c;就是可以截取一定长度的字符串&#xff0c;可能小特点就是len是字节&#xff0c;解决了汉字与英文字节不一样导致直接截取到的长度不一样的问题&#xff0c; #region 字符串截取函数 public static string CutString(string inputStrin…

hql中常用函數介紹二

为什么80%的码农都做不了架构师&#xff1f;>>> 四. ISNULL 函数和 NULLIF 函数SQL Server里的 ISNULL 与 ASP 中的 IsNull不同&#xff0c;SQL Server 中有两个参数&#xff0c;语法&#xff1a; ISNULL(check_expression, replacement_value) check_expression 与…

技术直播:讲一个Python编写监控程序的小故事

今年疫情“黑天鹅”事件改变了大家的生活。相信大家都经历过&#xff0c;每天早晨起床第一件事&#xff0c;就是查看数据。这些数据不仅仅是人们对活着的渴望&#xff0c;也是在建立对战胜疫情的决心。那么技术人怎么能通过自己所学的去进行数据监控呢&#xff1f;今天CSDN邀请…

ios开发之系统信息

1. //手机系统版本 self.phoneVersion [NSString stringWithFormat:"iOS %",[[UIDevice currentDevice] systemVersion]]; 2. // 获取当前设备可用内存(单位&#xff1a;MB&#xff09; - (double)availableMemory { vm_statistics_data_t vmStats; mach_msg_type_n…

混合时空图卷积网络:利用导航数据改进交通预测效果 | KDD 2020

作者 | 高德机器学习团队出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;引言时空预测&#xff08;spatio-temporal forecasting&#xff09;在天气预报、运输规划等领域有着重要的应用价值。交通预测作为一种典型的时空预测问题&#xff0c;具有较高的挑战性。日常通…

MS SQL Server和MySQL区别

- 最近在做MS SQL Server转换成MySQL的工作&#xff0c;总结了点经验&#xff0c;跟大家分享一下。同时这些也会在不断更新。也希望大家补充。   1 MySQL支持enum,和set类型&#xff0c;SQL Server不支持 2 MySQL不支持nchar,nvarchar,ntext类型 3 MySQL的递增语句是AUTO_INC…

DataGrid在分页状态下删除纪录的问题

在使用DataGrid分页的时候&#xff0c;正常情况下&#xff0c;绑定数据库列表纪录时会自动产生分页的效果&#xff0c;然而我发觉在删除纪录的时候总会发生"无效的 CurrentPageIndex 值。它必须大于等于 0 且小于 PageCount。"的异常&#xff0c;其实解决这个问题很简…

thinkphp pathinfo nginx 无法加载模块:Index

thinkphp 报了 无法加载模块:Index 错误位置 FILE: /var/multrix/wxactivity_archive/ThinkPHP/Library/Think/Dispatcher.class.php  LINE: 177 这个错&#xff0c;刚开始以为是路由错了&#xff0c;还跟了一下代码&#xff0c;始终没有答案&#xff0c;弄了一上午&#xff0…

Linux普通用户启动tomcat

修改tomcat/bin/catalina.sh文件&#xff0c;加入 export JRE_HOME/usr/java/jre1.6.0_27 ------------------------------------------------------ #!/bin/sh # chkconfig: 2345 80 30# description: tomcat starup scriptCATALINA_HOME/usr/local/apache-tomcat-7.0.21su - …

ASP.NET中利用cookies保持客户端信息

作者&#xff1a;未知 请作者速与本人联系我当前所吃的东东都固定为食物&#xff0c;所以一点也不惊讶&#xff0c;这一周的主题为cookies。Cookies用于存储特定用户信息&#xff0c;它提供了Web程序中一种有用的方式。多年以来&#xff0c;JavaScript开发人员已经进行了有关…