Java几种常用算法汇总

//冒泡排序

    int a[] = {5,4,3,6,7,9,2,1,8};
        for(int i =0;i<a.length;i++){
            for(int j =a.length-1;j>i;j--){
                if(a[j]<a[j-1]){
                    int temp = a[j];
                    a[j] = a[j-1];
                    a[j-1] = temp;
                }
            }
        }

        for(int i = a.length -1;i>=0;i--){
            for(int j = 0;j<i;j++){
                if(a[j]>a[j+1]){
                    int tmp = a[j];
                    a[j]=a[j+1];
                    a[j+1] = tmp;
                }
            }
        }

//直接选择排序

int a[] = {5,4,3,6,7,9,2,1,8};
for(int i = 0;i<a.length;i++){
    for(int j = i+1;j<a.length;j++){
    int temp = a[i];
        if(a[j] < temp){
            a[i] = a[j];
            a[j] = temp;
        }
    }
}

//快速排序

public void sort(int[] a,int m,int n){
    int i = m;
    int j = n;
    while(i != j ){
        for(;j>m;j--){
            if(i == j){
                break;
            }
            if(a[i] > a[j]){
                int temp = a[j];
                a[j] = a[i];
                a[i] = temp;
                break;
            }
        }
        for(;i<n;i++){
            if(i == j){
                break;
            }
            if(a[i] > a[j]){
                int temp = a[j];
                a[j] = a[i];
                a[i] = temp;
                break;
            }
        }
    }
    if(i<n)
        sort(a,i+1,n);
    if(j>m)
        sort(a,m,j-1);
}

//归并排序

  public static void sort(int[] data,int left,int right){
       if(left == right)
           return;
       int mid = (left+right)/2;
       sort(data,left,mid);
       sort(data,mid+1,right);
       merge(data,left,mid,right);
       print(data);  
   }

   public static void merge(int[] data,int left,int mid,int right){
       int[] temp = new int[data.length];
       int third = left;
       int tmp = left;
       int center = mid+1;
       while(left<=mid && center<=right){
           if(data[left]<=data[center]){
               temp[third++] = data[left++];
           }else{
               temp[third++] = data[center++];
           }
       }
       while(left<=mid){
           temp[third++] = data[left++];
       }
       while(center<=right){
           temp[third++] = data[center++];
       }
       while(tmp<=right){
           data[tmp] = temp[tmp++];
       }
   }

//二分查找

    public int search(int[] a,int m,int n){
        int k = (m+n)>>1;
        if(b>a[k])
            k = search(a,k+1,n);
        else if(b<a[k])
            k = search(a,m,k-1);
        return k;
    }

//插入排序

    int a[] = {5,4,3,6,7,9,2,1,8};
        for(int i=1;i<a.length;i++){
            for(int j =i;j>0;j--){
                if(a[j]<a[j-1]){
                    int tmp = a[j];
                    a[j] = a[j-1];
                    a[j-1]= tmp;
                }else{
                    break;
                }
            }
        }

后面会继续补充哒

  • 5
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值