java实现 冒泡 选择 插入 归并

  1. 冒泡排序

    public class Arry09 {
        public static void main(String[] args) {
        	//冒泡 从小到大
    		int[] arr = {1,6,33,86,4,5,3,0};
    		for (int j = 0; j < arr.length-1; j++) {
                //决定循环次数
    			for (int i = 0; i < arr.length-1-j; i++) {
                    //进行排序,arr.length-1-j 其中-1是为防止数组越界,-j是对后面以排好的数据不进行排序,加快速度
    				if(arr[i]>arr[i+1]) {
    					int temp = arr[i];
    					arr[i] = arr[i+1];
    					arr[i+1] = temp;
                     //此处进行交换
    				}
    			}
    		}
    		System.out.println(Arrays.toString(arr));
    	}
    }
    
  2. 选择排序

    public class Arry10 {
         public static void main(String[] args) {
    		//选择排序,从小到大
        	int[] arr = {1,6,33,86,4,5,3,0,43};
    
        	for (int j = 0; j < arr.length; j++) {
        		int min = arr[j];
            	int minidex =j;
    			for (int i = j; i < arr.length; i++) {
                   //这里i=j要注意
    				if(min>arr[i]) {
    					min = arr[i];
    					minidex = i;
    				}
    			}
    			int temp =arr[j];
    			arr[j] = arr[minidex];
    			arr[minidex] =temp;
    			
    		}
        	System.out.println(Arrays.toString(arr));
    	}
    }
    
  3. 插入排序

     public static void main(String[] args) {
           int arr[] = {4, 1, 3, 2, 7, 8, 9};
           for (int i = 1, j, current; i < arr.length; i++) {
               current = arr[i];
               for (j = i - 1; j >= 0 && arr[j] > current; j--) {//这里注意,在循环过后,j的值为-1
                   arr[j + 1] = arr[j];
               }
               arr[j + 1] = current;
           }
           for (int i = 0; i < arr.length; i++) {
               System.out.println(arr[i]);
           }
       }
    
  4. 归并排序

       public static void main(String[] args) {
           int arr[] = {4, 1, 3, 2, 7, 8, 9};
           sort(arr,0,arr.length-1);
           System.out.println(Arrays.toString(arr));
       }
       public static  void sort(int[] arr,int lo,int hi){
            if(lo>=hi) return;
            int mid = lo+(hi-lo)/2;
            sort(arr,lo,mid);
            sort(arr,mid+1,hi);
            merge(arr,lo,mid,hi);
       }
       public static void merge(int[] arrs,int lo,int mid,int hi){
           int[] copy = arrs.clone();
           int i=lo,k=lo,j=mid+1;
           while (k<=hi){
               //分为四种情况
               if(i>mid){//当前面部分排好序
                   arrs[k++]=copy[j++];
               }else if(j>hi){//当后面部分排好序
                   arrs[k++] =copy[i++];
               }else if(copy[j]<copy[i]){//当后面比前面小
                   arrs[k++]=copy[j++];
               }else {//当前面比后面小
                   arrs[k++]=copy[i++];
               }
           }
       }
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值