昨天看了传智博客毕向东老师的视频,让我对这两种数组排序的方法温故而知新。
今天自己写了一遍代码,发上来让更多的人了解一下。
1、选择排序
给定一个数组,int [] shuzu = {5,7,6,8,3,2,9};
选择排序就是让shuzu[0] 与shuzu[1],shuzu[],shuzu[3]……以此去比较,如果前面的一个数比后面的大,那么进行位置的置换。
第一遍的时候已经把最小的数字确定了,并且排序到了第一位。然后以此类推,直到最大也确定了,排序也就完成了。
2、冒泡排序
给定一个数组,int [] shuzu = {5,7,6,8,3,2,9};
冒泡排序就是让shuzu[0]与shuzu[1]进行比较,shuzu[1]与shuzu[2]进行比较,每一个相邻的进行比较,比较到了到第二个数字的时候,最后一个也就比较完成了,当完成第一次循环的时候,最大数字会比较出来。
当第二次循环的时候内循环的次数就会变少,因为最大的已经出来了。遇到后面的数字比前面的数字大的时候进行位置的置换。
一次类推冒泡排序的循环完成。
下面是详细的代码,本人菜鸟,有错误的地方希望指正!
package shuzu;
public class paixun1 {
public static int[] zhihuan(int [] a,int x){
int temp=0;
if(a[x]>a[x+1]){
temp=a[x];
a[x]=a[x+1];
a[x+1]=temp;
}
return a;
}
public static int[] zhihuan1(int [] a,int x,int y){
int temp=0;
if(a[x]<a[y]){
temp=a[x];
a[x]=a[y];
a[y]=temp;
}
return a;
}
public static void bianli(int[] arr){
for(int x=0;x<arr.length;x++){
System.out.println("arr["+x+"]="+arr[x]);
}
}
public static int[] xuanze(int [] arr){
for(int x=0;x<arr.length;x++){
for(int y=0;y<arr.length;y++){
zhihuan1(arr,x,y);
}
}
return arr;
}
public static int[] maopao(int [] arr){
for(int x=0;x<arr.length-1;x++){
for(int y= 0;y<arr.length-x-1;y++){ //-x 是为了减少循环的次数,-1是为了防止角标越界
zhihuan(arr,y);
}
}
return arr;
}
public static void main(String[] args) {
int [] shuzu = {5,7,6,8,3,2,9};
//选择排序
bianli(shuzu);
System.out.println("————————————————————————————————————————————————————");
System.out.println("这是选择排序");
int [] a =xuanze(shuzu);
bianli(a);
//冒泡排序
System.out.println("————————————————————————————————————————————————————");
System.out.println("这是冒泡排序");
int [] ab =maopao(shuzu);
bianli(ab);
}
}
输出打印结果:
arr[0]=5
arr[1]=6
arr[2]=7
arr[3]=8
arr[4]=3
arr[5]=2
arr[6]=9
————————————————————————————————————————————————————
这是选择排序
arr[0]=2
arr[1]=3
arr[2]=5
arr[3]=6
arr[4]=7
arr[5]=8
arr[6]=9
————————————————————————————————————————————————————
这是冒泡排序
arr[0]=2
arr[1]=3
arr[2]=5
arr[3]=6
arr[4]=7
arr[5]=8
arr[6]=9