整体比较图解
冒泡排序
核心思想
1、两个动作:比较与交换
2、三个变量:相邻两个变量+一个临时变量
3、一个标志位
4、较大的后移
图解
代码
private static void buuleSort(int []a,int n){
for (int i=0;i<n;i++){
boolean flag=false;
for (int j=0;j<n-1;j++){
if (a[j]>a[j+1]){
int tmp=a[j+1];
a[j+1]=a[j];
a[j]=tmp;
flag=true;
}
}
if (!flag) break;
}
}
插入排序
核心思想
1、两个动作:比较与移动
思想:取没排序区间中的元素,在已排序区间中找到合适的插入位置将其插入,并保证已排序区间数据一直有序。
2、三个变量:相邻的两个变量(用于移动)+一个用于比较的值
图解
代码
public static void insertSort(int []a,int n){
if(n<=1) return ;
for (int i=1;i<n;i++){
int value=a[i];
int j=i-1;
for (;j>=0;j--){
if (a[j]>value){
a[j+1]=a[j];
}else{
break;
}
}
a[j+1]=value;
}
}
选择排序
核心思想
1、两个动作:比较与交换
2、一个最值(用于比较)+临时变量中介
图解
代码
public static void selectionSort(int []a,int n){
if (n<=1) return;
for (int i=0;i<n-1;i++){
//查找最小值
int minIndex=i;
for (int j=i+1;j<n;j++){
if (a[j]<a[minIndex]){
minIndex=j;
}
}
//交换
int tmp=a[i];
a[i]=a[minIndex];
a[minIndex]=tmp;
}
}