数据结构与算法:动态图解十大经典排序算法(含JAVA代码实现) - 知乎 (zhihu.com)
冒泡排序
import java.util.Arrays;
/**
* 两两比较,每一轮选出此轮的最值放到最后(咕咚咕咚)
*/
public class Test1 {
public static void main(String[] args) {
int[] a=new int[10];
for (int i = 0; i < a.length; i++) {
a[i]=(int)(Math.random()*100);
}
System.out.println(Arrays.toString(a));
for (int i = 0; i < a.length-1; i++) {//n个数,比较n-1次
for (int j = 0; j < a.length-1-i; j++) {//每比较一次,最值排到最后,
if(a[j]>a[j+1]){//升序
int tmp=a[j];
a[j]=a[j+1];
a[j+1]=tmp;
}
}
}
System.out.println(Arrays.toString(a));
}
}
选择排序
import java.util.Arrays;
/**
* n个数,比n轮,找出每一轮的最值,然后交换此轮的第一个值和最值
*/
public class Test2 {
public static void main(String[] args) {
int[] a=new int[10];
for (int i = 0; i < a.length; i++) {
a[i]=(int)(Math.random()*100);
}
System.out.println(Arrays.toString(a));
for (int i = 0; i < a.length; i++) {//n个数 比n次
int max=a[i];
int maxIndex=i;
for (int j = i+1; j < a.length; j++) {//找每一轮的最值
if(a[j]>max){//降序!!!!!!!!!!!!!!!!!!!!!!
max=a[j];
maxIndex=j;
}
}
//交换此轮第一个数值和最值
int tmp=a[i];
a[i]=a[maxIndex];
a[maxIndex]=tmp;
}
System.out.println(Arrays.toString(a));
}
}
插入排序
import java.util.Arrays;
/**
* n个数,比n次,依次跟前面的数比较,大于的后移
*/
public class Test3 {
public static void main(String[] args) {
int[] a=new int[10];
for (int i = 0; i < a.length; i++) {
a[i]= (int)(Math.random()*100);
}
System.out.println(Arrays.toString(a));
for (int i = 1; i < a.length; i++) {//从第2个数开始往前比
int tmp=a[i];//取出一个数放入tmp
int f=0;
for (int j = i-1; j >=0; j--) {//与i之前的数进行比较
if(a[j]>tmp){//比tmp大的都向后移
a[j+1]=a[j];
}
else{
a[j+1]=tmp;//插入tmp
f=1;//找到了比tmp小的,标记为1
break;//退出循环
}
}
if(f==0){//f=0说明没有找到比tmp小的,意味着tmp最小,放入第一个
a[0]=tmp;
}
}
System.out.println(Arrays.toString(a));
}
}