数组排序

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),即所有记录放在同一组中进行直接插入排序为止。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值