栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

备战面试——算法

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

备战面试——算法

第一天
  • 1.选择排序
  • 2.冒泡排序
  • 3.提取一个数最右边的1
  • 4.插入排序
  • 5.对数器
  • 6.提取数组中间数
  • 7.master公式(递归时间复杂度)
  • 8.归并排序(二分)
  • 9.快速排序

1.选择排序
public class Main {
    public static void main(String[] args) {
      int []arr={1,5,3,4,2};
      for(int i=0;i<4;i++){
          int index=i;//min_sub
          for (int j = i+1; j <5 ; j++) {
              index=arr[j]>arr[index]?index:j;//swap-sub
              swap(arr,i,index);
          }
      }
        for(int x:arr){
            System.out.println(x);
        }
    }
    public static void swap(int arr[],int a,int b){
        int tmp=arr[a];
        arr[a]=arr[b];
        arr[b]=tmp;
    }
}
2.冒泡排序
public class Main {
    public static void main(String[] args) {
      int []arr={1,5,3,4,2};
        for (int i = 4; i >0 ; i--) {//i=lengthen-1,从后向前确定

            for (int j = 0; j arr[j+1])
                    swap(arr,j,j+1);
            }
        }
        for(int x:arr){
            System.out.println(x);
        }
    }
    public static void swap(int arr[],int a,int b){
	//        int tmp=arr[a];
	//        arr[a]=arr[b];
	//        arr[b]=tmp;
        
        if(arr[b]==arr[a])
            return;
        arr[a]=arr[a]^arr[b];
        arr[b]=arr[a]^arr[b];
        arr[a]=arr[a]^arr[b];
    }
}
3.提取一个数最右边的1
int rightOne = eor & (~eor+1);//提取一个数最右边的1
4.插入排序
public class Main {
    public static void main(String[] args) {
      int []arr={1,5,9,5,6,4,7,8,5,3};
      
        for (int i = 1; i =0 && arr[j+1] 
5.对数器 
import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        int testTime=500000;//测试次数
        int maxSize=100;//测试数组长度
        int maxValue=100;//测试范围

        boolean succed=true;//测试结果

        for (int i = 0; i  
6.提取数组中间数 
public class Main {
    public static void main(String[] args) {
        int arr[]={1,2,3,4,5,6,7,8,9,10,11,12};
        int L=0;//起始位置
        int R=arr.length;//终点位置

        //int k=(L+R)/2;        //取一半的方法,可能会溢出
        
        //int k=L+(R-L)/2       //起点加距离的一半
        int k=L+(R-L)>>1;       //简化

        System.out.println(k);
    }
}
7.master公式(递归时间复杂度)

8.归并排序(二分)
public class Main {
    public static void main(String[] args) {
        int arr[]={6,5,6,15,8,63,12,102,4,5,1,0,1,23,2,1,69};

        process(arr,0,arr.length-1);

        for(int x:arr)
            System.out.println(x);

    }
    public static void process(int arr[],int L,int R){
        if(L==R) return;

        int mind =L+((R-L)>>1);

        process(arr,L,mind);
        process(arr,mind+1,R);

        //组合
        merge(arr,L,mind,R);
    }

    public static void merge(int arr[],int L,int mind,int R){
        //开辟组合数组
        int [] help=new int[R-L+1];

        int p1=L;
        int p2=mind+1;
        int i=0;
        while(p1<=mind && p2<=R){
            help[i++] = arr[p1] <= arr[p2] ? arr[p1++] : arr[p2++];
        }
        while(p1<=mind)
            help[i++]=arr[p1++];

        while(p2<=R)
            help[i++]=arr[p2++];

        for (int j = 0; j  
9.快速排序 
public class Main {
    public static void main(String[] args) {
        int arr[]={6,5,6,15,8,63,12,102,4,5,1,0,1,23,2,1,69};

        quickSort(arr,0,arr.length-1);

        for(int x:arr)
            System.out.println(x);
    }
    //L:起始位置,R:终点位置;
    public static void quickSort(int arr[],int L,int R){
        if(L 区
        }
    }
    public static int[] partition(int arr[],int L,int R){
        int less=L-1;   // “小于区域” 的左边界
        int more=R;     // “大于区域” 的右边界

        while(L < more){
        	//如果当前值arr[L]number值arr[R] 
            //1.L原地不变
            //2.arr[L]和大于区域(more)前一个做交换   
            }else if (arr[L]>arr[R]){// 当前数 >  划分值
                swap(arr,--more,L);
              
                
            }else{//number与arr[L]相等,什么也不做直接跳下一个
                L++;
            }
        }
        swap(arr,more,R);

        return new int[]{
                less+1,more
        };
    }

    public static void swap(int arr[],int a,int b){
        if(a==b) return;

        arr[a]^=arr[b];
        arr[b]^=arr[a];
        arr[a]^=arr[b];
    }
}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/346147.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号