选择排序法: 从右往左排,先找出最大的
public class MyDemo030 {
public static void main (String [] args) {
int [] arr = {8,4,2,1,23,344,12};
for (int row =0;row<arr.length-1;row++){
int last = arr.length-1-row;//最后坐标
int max = 0;//初始第一个人是最高的
for (int col=1;col<arr.length-row;col++) {
if ( arr[max] < arr [col]) {
max=col;
}
}
//一轮结束 两位置交换
if(max!=last){
int temp = arr[max];
arr[max] = arr[last];
arr[last] = temp;
}
}
for(int i=0;i<arr.length;i++) {
System.out.print(arr[i]+"----");
}
}
}
插入排序法:固定第一位
//插入排序法
public class MyDemo031{
public static void main (String [] args) {
int [] arr = {8,4,2,1,23,344,12};
for (int i = 0;i<arr.length-1;i++) {
int curr = arr[i+1];//获取你要判断的数字
for ( int j = i;j >= 0;j--) {//j=0
if (curr < arr[j]) {//(curr = 4,arr[0]=8)
arr[j+1] = arr[j]; //_,8,2,1
}else {
break;
}
arr[j] = curr;
}
}
for ( int i = 0;i<arr.length;i++) {
System.out.print(arr[i]+"----");
}
}
}
希尔排序法:首先计算步长 步长越长,组数越多
//希尔排序
public class MyDemo032 {
public static void main(String [] args ){
int [] arr = {8,4,2,1,23,344,12};
//分组插入
//首先计算步长 arr.length/2; 3 [8,1,12] [4,23] [2,344]
//小组排序 [1,8,12] [4,23] [2,344] ==>[1,4,2,8,23,344,12]
//重新计算新步长 原步长/2 1==>
//计算步长 每次步长缩短一半 直到步长为1 就结束
for (int jump = arr.length/2;jump>0;jump/=2) {
//从每组第二个数开始 多少组取决于步长
for(int i = jump;i < arr.length;i++){//arr[i]=3 = 1
//取出每组第2个数
int value = arr[i];
//循环 小组中数据排序
int j=i-jump;
while (j>=0 && value>arr[j]) {
arr[j+jump]=arr[j];
j-=jump;
}
arr[j+jump] = value;
}
}
for ( int i=0;i<arr.length;i++) {
System.out.print(arr[i]+"----");
}
}
}