1、选择排序
1.1、原理
数组中的每一个元素与其他所有元素进行对比(除了本身外),对比结果是否符合预期
升序则判断谁大,将较大的值换到后面;
降序则判断谁小,将较小的值换到后面;
**** 升序排序例子,降序同理,只是调整一下判断逻辑
1、升序排序说明
int[] a = {4,2,1,3};
a[0]-a[1]比较 =>{2,4,1,3};
a[0]-a[2]比较 =>{1,4,2,3};
a[0]-a[3]比较 =>{1,4,2,3};
a[1]-a[2]比较 =>{1,2,4,3};
a[1]-a[3]比较 =>{1,2,4,3};
a[2]-a[3]比较 =>{1,2,3,4};
1.2、代码实现
**** 升序排序例子,降序同理,只是调整一下判断逻辑
public static void selectSort(int[] a){
int temp = 0;
//外层循环每一个元素,但是不包括最后一个元素
for(int i= 0 ;i< a.length-1;i++){
//里层循环是从外层循环的下一个元素,到数组的最后一个元素
for(int j = i+1;j<a.length;j++){
if(a[i] > a[j]){
//每一个元素与下一元素进行对比
temp = a[i];
a[i] = a[j];
a[j] = temp;
}
}
}
}
2、冒泡排序
2.1、原理
数组中的相邻元素进行对比,对比结果是否符合预期
升序则判断谁大,将较大的值换到后面;
降序则判断谁小,将较小的值换到后面;
**** 升序排序例子,降序同理,只是调整一下判断逻辑
1、升序排序说明
int[] a = {4,1,3,2};
(1)第一个冒泡数产生(4)
a[0]-a[1]比较 =>{1,4,3,2};
a[1]-a[2]比较 =>{1,3,4,2};
a[2]-a[3]比较 =>{1,3,2,4};
(2)第二个冒泡数产生(3)
a[0]-a[1]比较 =>{1,3,2,4};
a[1]-a[2]比较 =>{1,2,3,4};
(3)第三个冒泡数产生(2)
a[0]-a[1]比较 =>{1,2,3,4};
2.2、代码实现
**** 升序排序例子,降序同理,只是调整一下判断逻辑
/***
一次冒泡,仅为说明原理所写
每一个元素与相邻元素进行对比,不包括最后一个元素
循环就是0~(a.length-1)
**/
int[] a = {4,1,3,2};
int temp =0;
for(int j =0;j<a.length-1;j++){
if(a[j] >a[j+1]){
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
/***
循环次冒泡,进行排序
**/
public static void bubbleSort(int[] a){
int temp = 0;
/**
i
代表最多需要少次冒泡
**/
for(int i = 0;i<a.length-1;i++){
/**
1、从索引0出开始,与下一个元素进行比较,
不包括最后一个元素
不包括已经产生的冒泡的数
***/
for(int j =0;j<a.length-1-i;j++){
if(a[j] >a[j+1]){
temp = a[j];
a[j] = a[j+1];
a[j+1] = temp;
}
}
}
}
### 备注(打印数组的方法-测试用)
/**
格式化打印数组
返回值: void
方法参数: 数组
*/
public static void printArray(int[] arr){
System.out.print("[");
for(int i = 0 ; i < arr.length ; i++){
if( i == arr.length-1 ){
System.out.print(arr[i]+"]");
}else{
System.out.print(arr[i]+",");
}
}
System.out.println();
}
此文章纯属个人总结,如有问题,欢迎评论指正;