选择排序法、插入排序法、希尔排序法

选择排序法: 从右往左排,先找出最大的

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]+"----");
			
		}
	}
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值