升序排序
冒泡排序:
每次循环把最大值沉到最底下。
循环n-1次,外层i从1循环到n,内层j从0循环到n-i。每次判断a[j]和a[j+1]大小关系,小的放前面。这样最大的数就会被放到a[len-1] (第一次循环 i=1,j=len-2,j+1=len-1.)
public static void BubbleSort(int[] a) {
//冒泡排序 每次排序将最大的数沉到最后
//循环i-1
//外层从1循环到len 内层从0循环到len-i
for(int i=1;i<a.length;i++) {
//j从0开始循环到len-1(后i个已经排好序,不用动)
for(int j=0;j<a.length-i;j++) {
if(a[j]>a[j+1]) {
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
System.out.println(Arrays.toString(a));
}
}
插入排序
只看前i个,从后往前遍历,第i次排序只把下标为i的数插入到前面排序好的序列中,后面的数向后挪一位。
记录要插入的的元素数值。循环n-1次,i从1开始循环,每次看a[i]之前有没有比a[i]大的,有的话插入a[i]
public static void InsertSort(int[] a) {
//插入排序:排序len-1轮,从后往前遍历,第i次排序只把下标为i的数插入到前面排序好的序列中,后面的数向后挪一位。
//循环n-1次
//从1下标开始排序 外层从1循环到len 内层从i-1循环到0
for(int i=1;i<a.length;i++) {
int min=a[i]; //记录当前要插入的数
int j=i-1;
for(;j>=0&&a[j]>min;j--) {
//遍历数组,如果当前遍历的数大于min,就和min交换位置
a[j+1]=a[j];
}
//遍历完后j+1即为a[i]要插入的位置
a[j+1]=min;
System.out.println(Arrays.toString(a));
}
}
选择排序
找i-len-1中的最小值,第i趟排序把i之后元素的最小值放到a[i]。
public static void SelectedSort(int[] a) {
//选择排序:第i趟排序把i之后元素的最小值放到a[i]
//循环len-1轮
//外层从0循环到len-1 内层从i+1循环到len
for(int i=0;i<a.length-1;i++) {
//记录最小值的下标
int idx=i;
//从i往后开始寻找比i数值更小的下标idx
for(int j=i+1;j<a.length;j++) {
//寻找i之后最小值的下标
if(a[j]<a[idx]) {idx=j;}
}
//交换最小的下标idx元素和i下标元素
int t=a[i];
a[i]=a[idx];
a[idx]=t;
System.out.println(Arrays.toString(a));
}
}