• 排序 查找


    
    

    归并排序:

    public static void merge(int[] a,int min,int mid,int max) {
        int[] arr=new int[max-min+1];//定义新的空数组,长度与传入的数组长度一致
        int x=min;//左边数组起始位置
        int y=mid+1;//右边数组起始位置
        int k=0;//设新数组的角标k,并从0开始
        while(x<=mid&&y<=max) {//满足最小位置在中间位置以内或相等,
            //同时中间往后移一个的位置在最大位置以内或等于,就执行while循环
            if(a[x]<=a[y]) {//左边的数组分别与右边的数组比较,若左边的对应元素小于右边的
                //,将左边的这一元素加入新数组,左边数组元素依次往后与右边比较,若左边仍小于右边,
                //继续将左边元素加入新数组
                arr[k++]=a[x++];
            }else {//右边元素比左边小就将右边元素加入数组
                arr[k++]=a[y++];
            }
        }
        while(x<=mid){//将左边剩余的元素加入新数组
            arr[k++]=a[x++];
        }
        while(y<=max){//将右边剩余的元素加入新数组
            arr[k++]=a[y++];
        }
        for(int i=0;i<arr.length;i++){//将新数组里的元素加入原数组
            a[i+min]=arr[i];
        }
        
    }
    
    public static void mergesort(int[] a,int min,int max){
        if(min<max){
            int mid=(min+max)/2;
            mergesort(a,min,mid);//递归拆分数组左边
            mergesort(a,mid+1,max);//递归拆分数组右边
            merge(a,min,mid,max);//将拆分的数组有序排列
        }
    }
    
    
    public static void main(String[] args) {
        int[] a= {1,4,12,32,31,34,58,3,23,5};
        mergesort(a,0,a.length-1);
        System.out.println(Arrays.toString(a));
    }

    获取数组最值
    int arr[] = 数组
    int max= arr[0];
    for(int i = 0;i < arr.length;i++){
    if(arr[i] > (最小值反之)max){
    max = arr[i];
    }
    }
    System.out.println("数组arr最大值为:"+max);

    选择排序
    选择排序是一次和后面的元素进行比较,第一次比较得到最小值

    for(int a=0;a<arr.length-1;a++){

      for(int b=a+1;b<arr.length;b++){

        if(arr[a]>arr[b]){

          int temp=0;

          temp=arr[a];

          arr[a]=arr[b];

          arr[b]=temp;

        }

      }

    }

    System.out.println(Arrays.toString(arr));

    冒泡排序
    一次比较两个元素,如果他们的顺序错误就把他们交换过来,最先获得最大值放右边

    for(int a =0;a<arr.length-1;a++){//控制比较次数

      for(int b=0;b<arr.length-1-a;b++){

        if(arr[b]>arr[b+1]){

          int c=0;

          c=arr[b];

          arr[b]=arr[b+1];

          arr[b+1]=c;

        }

       }

    }

     System.out.println(Arrays.toString(arr));

    数组的查找
    一般查找:public int 函数名(int[] arr,int a){
    for(int i = 0;i < arr.length;i++){
    if(arr[i] == a){
    return i;
    }
    }
    return -1;数组的下标从0开始,-1代表没有找到,不存在此元素
    }
    二、折半查找
    方法一:

    public int 函数名(int[] arr,int a){
      int start,end,mid;
      start = 0;
      end = arr.length - 1;
      mid = (start+end)/2;

    while(arr[mid] != a){
     if(a > arr[mid]){
      start = mid + 1;

      }else{
      end = mid - 1;
    }
      if(start > end){
      return -1;
    }
      mid = (start+end)/2;
    }
      return mid;
    }
    优点:折半区间条件判断循环,运行运算步骤更短,优化
    方法 二

    public int 函数名(int[] arr,int a){
      int start = 0,end = arr.length-1,mid;
    while(start <= end){
      mid = (end + start)/2;
     if(a > arr[mid]){
      start = mid + 1;
      }else if(a < arr[mid]){
      end = mid - 1;
      }else{
      return mid;
      }
    }
      return -1;
    }

    封装方法:main方法{}之后,在类中的一段具有特定功能的小程序,可在main方法里调用

  • 相关阅读:
    Oracle
    Oracle11g服务详细介绍及哪些服务是必须开启的?
    数据结构——二叉树树的遍历理论与实现
    MapReduce新版客户端API源码分析
    【编程范式】汇编解释swap方法
    iPhone、iPod和iPad离线固件升级的方法
    Linux备份
    mysql下用户和密码生成管理
    The secret of ROWID
    linux文件权限解说
  • 原文地址:https://www.cnblogs.com/tanghao666/p/7209232.html
Copyright © 2020-2023  润新知