Java数组排序小结
数组排序目前常用的主要有五种,分别为冒泡排序法,选择排序法,快速排序法,插入排序,希尔排序法,每种排序法都有自己独特的特点,下面就分别介绍一下。
1. 冒泡排序:说起冒泡排序,可以说是最容易理解的排序方式,记得在刚接触c语言时,教材上关于数组排序就列出了冒泡排序这种方法,顾名思义,冒泡排序就像平时玩的冒泡游戏一样,重的部分沉下去,而轻的部分会浮上来,经过一段时间后,就会形成轻的部分在上,重的部分在下的情况。那么怎么使用代码表示呢?其实很简单,只需要两个for循环即可
//排序方法1,冒泡排序
public void maopao(int[]a){
for(int i=0;i<a.length-1;i++){//i只需要循环到倒数第二个数就行了
for(int j=i+1;j<a.length;j++){
//判断,小的冒出来,大的沉下去
if(a[i]>a[j])
{//互换两个值
a[i]=a[i]+a[j];
a[j]=a[i]-a[j];
a[i]=a[i]-a[j];
}
}
}
}
在for循环里,通过比较,从而实现大与小互换的效果、
冒泡排序的优点是易于理解,比较简单;而它的主要缺点是耗时较长,效率不高
2.选择排序:选择排序的思想是每次执行循环时找到此次循环数组中的最小值所对应的索引,之后将循环开始时的第一个数与该索引对应的值交换,这样就可以一步一步的将数组从小到大排列,如代码所示
//排序方法2,选择排序
public void choose(int[]a){
//先找到数组值最小的索引
for(int i=0;i<a.length;i++){
//先令每次循环开始时的第一个数组下标为最小索引
int lowerIndex=i;
for(int j=i+1;j<a.length;j++){
//判断。当Index所指向的值大于数组的某个值时,将最小索引的值改为数组下标
if(a[lowerIndex]>a[j]){
lowerIndex=j;
}
}
//循环结束时,得到的Index指向的值即为最小值
//将这个值与循环开始的第一个下标的值对换
int temp=a[lowerIndex];
a[lowerIndex]=a[i];
a[i]=temp;
}
}
乍看之下,仿佛跟冒泡差不多,其实也可以说选择排序是冒泡的改良版,二者的优缺点差异不大,都有比较次数过多,排序时间过长的缺点。
3.插入排序:插入排序是从数组的第二项开始,与第一项的数比较,如果小于,则更换位置,比较完之后,再从数组的第三项开始,与第二项,第一项比较,依此类推,一直到数组的最后一项比较完之后,结束循环。代码如下:
//排序方法3,插入排序
public void ChaRu(int[]a){
//首先从数组的第二项开始,依次与左边比较
for(int i=1;i<a.length;i++){
for(int j=i;j>0;j++){
//如果左边的值大于右边,则交换位置
if(a[j]<a[j-1]){
int temp=a[j];
a[j]=a[j-1];
a[j-1]=temp;
}
}
}
}
插入排序的优点是:循环次数比之前要少,相应的运行速度会快一些。但是缺点主要是缺点:比较次数不一定,比较次数越少,插入点后的数据移动越多,特别是当数据总量庞大的时候。
4希尔排序法
//排序方法4.希尔排序
public void shell(int[]x){
//分组
for(int increment=x.length/2;increment>0;increment/=2){
//每个组中排序
for(int i=increment;i<x.length;i++){
int temp=x[i];
int j=0;
for(j=i;j>=increment;j-=increment){
if(temp<x[j]-increment){
x[j]=x[j-increment];
}else{break;}
}
x[j]=temp;
}
}
}
希尔排序基本思想: 先取一个小于n的整数d1作为第一个增量,把文件的全部记录分成(n除以d1)个组。所有距离为d1的倍数的记录放在同一个组中。先在各组内进行直接插入排序;然后,取第二个增量d2<d1重复上述的分组和排序,直至所取的增量dt=1(dt<dt-l<…<d2<d1),即所有记录放在同一组中进行直接插入排序为止。
分享到:
相关推荐
总结来说,本文介绍的C#实现二维数组排序的方法,通过将二维数组转换为`DataTable`并利用其内置的排序功能,提供了一种灵活且高效的解决方案。这种方法不仅适用于各种数据类型,而且保持了原始数组的引用,使得排序...
本话题聚焦于“易语言自定义数据类型数组排序”,将深入探讨如何在易语言中创建、操作自定义数据类型数组,并实现各种排序算法,如根据产地、类别和售价等属性进行排序。 自定义数据类型在易语言中允许我们定义包含...
总结来说,LabVIEW中的二维数组排序涉及理解二维数组的结构,掌握各种排序方法,包括按行、按列及自定义排序,以及处理数据类型转换和性能优化。熟练掌握这些技能将使你在LabVIEW编程中游刃有余,处理各种数据处理...
在"易语言数组排序源码.zip"这个压缩包中,我们可以期待找到一些关于易语言如何实现数组排序的示例代码。数组排序是计算机科学中的基础操作,它在各种算法和数据处理中都有着广泛的应用。 数组排序通常涉及两种主要...
本篇内容将深入探讨C语言中的数组排序算法。 首先,数组排序是算法设计中常见的问题,它涉及到数组元素的重新排列,以达到特定的顺序,例如升序或降序。这里提到了两种基本的排序算法:筛选法(用于求素数)和选择...
在MATLAB中,数组排序是数据处理和分析过程中的常见操作。`sort`函数是MATLAB提供的一种方便的工具,可以对各种类型的数组进行升序或降序排序。以下是对`sort`函数的详细说明: 1. **基本用法**: `B = sort(A)` ...
本资源“易语言数组排序算法集合”提供了多种常见的排序算法的源代码实现,对于学习易语言以及算法理解都有极大的帮助。下面将详细介绍其中提及的几种排序算法。 1. **冒泡排序**: 冒泡排序是最基础的排序算法之...
在IT行业中,数组排序是一个非常基础且重要的概念,特别是在编程领域。数组是数据结构的一种,它存储一组相同类型的元素,并且这些元素可以通过索引进行访问。排序则是将数组中的元素按照特定规则(如升序或降序)...
VB多维数组排序源码
VB二维数组排序源码
在 MATLAB 中,数组排序是一个非常常见的操作,尤其在数据分析和科学计算中。MATLAB 提供了多种内置函数来满足不同的排序需求。以下是一些主要的排序方法及其详细说明: 1. **sort 函数**: - `sort(A)`:对一维...
任意数组排序 很经典经典 学习交流
在编程领域,数组排序是一个非常基础且重要的概念,尤其在Visual Basic (VB)中,它在数据处理和算法实现上扮演着关键角色。本资源"VB070-数组排序 源代码"提供了一组关于如何在VB环境中对数组进行排序的源代码示例,...
在.NET框架中,属性数组排序是一项常见的操作,特别是在ASP.NET开发中。这涉及到对对象集合进行排序,这些对象具有特定的属性,我们希望通过这些属性值来确定集合中的顺序。本篇将深入探讨如何使用.NET Framework...
在本文中,我们将深入探讨C#编程语言中的数组排序知识,并通过实际的代码示例来阐述这一主题。C#是一种广泛应用于开发Windows桌面应用、Web应用和服务端软件的强大语言,而数组作为C#中的基本数据结构,是进行数据...
一维数组排序标程,绝对AC,时间复杂度O(n logn),解压密码:JYQJYQFUCKYOU
易语言源码易语言自定义数据类型数组排序.rar 易语言源码易语言自定义数据类型数组排序.rar 易语言源码易语言自定义数据类型数组排序.rar 易语言源码易语言自定义数据类型数组排序.rar 易语言源码易语言自定义...
matlab数组排序matlab数组排序matlab数组排序matlab数组排序matlab数组排序matlab数组排序matlab数组排序matlab数组排序matlab数组排序matlab数组排序matlab数组排序matlab数组排序matlab数组排序matlab数组排序...
为普通数组和对象数组排序,对象数组排序时,可指定排序所依据的对象属性,汉字将以汉语拼音为序。
找了好多地方没有找到,自己写一个汇编语言实现的数组排序。