1.冒泡排序
冒泡排序广泛用于数组排序,大致原理就是从第一个数开始,通过和后面一个数相比较,将较大的往后挪,一一比较之后,将最大的放到最下面。第一次比较完毕将最大的数字放到最后面,第二次比较结束以后将第二大的数字放到最后面,依次进行。
其中,第5行之所以要减去i,是因为每放一个最大的数字到最下面,他们就不用再比较了,这样做只是为了提高效率。
public class BubbleSort{
int temp;
public void sort(int[] values){
for(int i=0;i<values.length;i++){
for(int j=0;j<values.length-1-i;j++){
if(values[j]>values[j+1]){
temp=values[j];
values[j]=values[j+1];
values[j+1]=temp;
}
}
}
}
}
2.选择排序
先找到整个数组里面的最小值,将其和数组的第一个数值进行交换。然后在除了第一个数值之外的剩下的数组里面进行搜索,找到最小的数值,将其和整个数组的第二个数值交换。依次进行,直到最后一个数值。
public class SelectionSort{
public void sort(int[] values){
for(int i=0;i<values.length;i++){
int minValueIndex = i;
for(int j=i+1;j<values.length;j++){
if(values[j]<values[minValueIndex]){
minValueIndex = j;
}
}
//交换数值
int temp = values[i];
values[i] = values[minValueIndex];
values[minValueIndex]=temp;
}
}
}
第3行的i是代表数组中的第i个数(i从0开始),每一轮要做的就是将除了第0到i-1之外的其它数进行比较(i=0时例外,全部都要进行比较),将最小的数值和第i个数值进行交换。第4行的意思是,比较刚开始的时候,先假设第i个数是最小的,将其索引记下来。一旦比较的过程中发现比它小的,就将索引换成那个数值的,依次比较下来。
3.插入排序
顾名思义,假设第0个元素已经在正确的位置上,从第1个元素开始,依次和左边已经排好的序列进行比较,将值插入到左边合适的位置上。
public class InsertionSort{
public void sort(int[] values){
for(int i=1;i<values.length;i++){
for(int j=i;j>0;j--){
if(values[j]<values[j-1]){
//交换
int temp = values[j];
values[j] = values[j-1];
values[j-1] = values[j];
}
}
}
}
}
4.数组自带的静态方法
这个方法是Arrays.sort(int[ ] values);
直接使用就可以了。怎么说呢?选择排序算法最主要考虑的就是效率,数组自带的这个排序方法叫做快速排序方法。看名字就知道效率最高,所以说默认情况下,就直接使用这个就行了。
说到这里,假如你想要进行反向排序的话,那么也可以使用数组自带的方法 Arrays.sort(int[ ] values, Collections.reverseOrder());
这样的话,比如你要用到比分之类的,就可以反向来排,分数越大越要排在前面。