在不断的语言学习中我们可以发现在我们的代码实现过程中我们经常用到排序的方法,而在我们的语言中不论是c/c++还是JAVA我们都能发现一些常用排序方法的身影,他们就是选择排序和冒泡排序,记得在最开始的时候接触C的时候学到的第一种排序方法就是[冒泡排序],慢慢的接触到更多的排序方法,在这里我想记录的排序方法是[冒泡排序]和[选择排序].
①选择排序的方法实现:选择排序原理是拿数组第一个下标元素依次和其他元素进行比较,当元素值小于(或大于)第一个下标的元素值时,将两个下标对应值进行调换,经过对此循环比较最终达到排序效果;
原理图如下:
代码实现:
//采用选择排序的方法对数组进行排序:
//选择排序原理:拿数组元素中的下表为0的元素和其他元素进行比较,若n[0]>n[x]则借助中间变量temp将n[0]和n[x]调换,使得第一次轮查下来之后下表为0的元素最小
//同理以下表为1,2,3,....n.length-2继续轮查,最终实现选择排序;
public static void SelectSort(int[] n){
for(int i=0;i<n.length-1;i++){
for(int j=i+1;j<n.length;j++){
if(n[i]>n[j]){
int temp=n[j];
n[j]=n[i];
n[i]=temp;
}
}
}
print(n);
}
②冒泡排序:冒泡排序是采用相邻的两个元素进行比较,如果下标元素n>n+1;则将两个元素相互调换;
原理图如下:
代码实现如下:
//对冒泡排序做一个实现
//冒泡排序原理:这里采用的也是嵌套for循环,外层的for循环的意义在于记录要比较的次数;内层for循环才是真正的排序;
//每次做排序都是从下标0开始,依次比较相邻的两个数;借助temp变量将大的书往后靠,则在第一轮比较中得出数组中的最大数存储在下标为s.lenghth-1中;
//下次比较得到的最大值则依次以下标减一存储,则最终得到二层循环中的表达式i<s.length-j-1;
public static void BubbleSort(int[] s){
for(int j=0;j<s.length;j++){
for(int i=0;i<s.length-j-1;i++){
if(s[i]>s[i+1]){
int temp=s[i];
s[i]=s[i+1];
s[i+1]=temp;
}
}
}
print(s);
}
以上的两种方法是我们经常能用到的排序的算法,不论是在哪种语言中他们的排序的思想是没有任何改变的,只是在代码实现的方式上有所改变而已;而在JAVA中我们可以采用上述的方法去做排序,但是我们也是可以用JVM自带的.sort方法去自动排序,如下:
int [] m={9,7,1,6,8,4,5,0,20,62,45,90,46,25};
System.out.print("排序前数组序列");
print(m);
Arrays.sort(m);
System.out.print("Sort排序后数组序列");