一.冒泡排序
1)定义:相邻两个数比较大小,然后交换位置
2) 分析:
原数 3 2 5 1
第一趟:
2 3 5 1
2 3 5 1 array.length-1-0
2 3 1 5 确定了一个数(把最大值放在最后面)
第二趟:
2 3 1 5 array.length-1-1
2 1 3 5 又确定了一个数
第三趟:
1 2 3 5 array.length-1-2 --->array.length-1-i
2)代码
1:
public static void main(String[] args) {
//某一天 把冒泡排序敲下来 熟练工种
// TODO Auto-generated method stub
int[]array=new int[] {3,2,5,1};
//该方法没有返回值 实际上 这个方法操作的是原数组
//外层循环控制 比较的趟数
//内层循环控制 -1:避免数组越界
//内循环 -2:每一趟比较 确定一个数 就意味着 少比较一次
for(int i=0;i<array.length-1;i++) {
for(int j=0;j<array.length-1-i;j++) {
if(array[j]>array[j+1]) {
//交换位置
int temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}
}
System.out.println(Arrays.toString(array));
2:
public class Demo03 {
//需求:封装一个函数 进行冒泡排序
public static void sort(int []array) {
for(int i=0;i<array.length-1;i++) {
for(int j=0;j<array.length-1-i;j++) {
if(array[j]>array[j+1]) {
int temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}
}System.out.println(Arrays.toString(array));
}
public static void main(String[] args) {
//传入的数组 相当于把数组的首地址传过去
//注意:这里是地址的传递
//拿到地址 就可以随便的更改数组元素的位置
//这是sort函数中 就是对原数组 进行操作
int[]array=new int[] {3,2,5,1};
sort(array);
}
}
二.选择排序
1.定义:选择一个数 与 下一个数进行比较
(用这个数和数组中的每一个数进行比较)
一般来说,就选择第0个数交换位置
2.代码
public class Demo04 {
public static void main(String[] args) {
int[]array=new int[] {3,2,5,1};
//外循环-1:最后一个数 不用比较了
//内循环 j=1开始 因为 array[0] 和array[0]不用比较
// 内循环 +i:每一趟比较 确定一个数
// 也就是说 每次都可以少比较一个数
for(int i=0;i<array.length-1;i++) {
for(int j=1+i;j<array.length;j++) {
/*
* 分析: 谁 和 谁 进行交换
* array[j] 和 array[i] 进行比较 交换位置
*
*/
if(array[j]<array[i]) {
//交换
int temp=array[j];
array[j]=array[i];
array[i]=temp;
}
}
}
System.out.println(Arrays.toString(array));
// System.out.println(Arrays.sort(array));
}
}