常见算法

三种排序

快排
public class kuaipai {

    /*思想:把vlaue排到中间,左边小,右边大
     * 1、选确定边界beginindex、endindex 和传入数组array
     * 2、指针移动begin、end
     */
    public static void main(String[] args) {
        int arry[] = {23,34,1,43,2,45,27,41};
        fastarry(arry,0,arry.length-1);
        for(int tmp:arry) {
            System.out.println(tmp);
        }
    }

    private static void fastarry(int[] arry, int beindex, int enindex) {

        int begin = beindex;
        int end = enindex;
        int value = arry[beindex];

        while(beindex<enindex) {//边界保证
            while(beindex<enindex&&value<=arry[enindex]) {
                enindex--;
            }//缩小边界

            if(value>arry[enindex]) {
                int temp = arry[enindex];
                arry[enindex] = arry[beindex];
                arry[beindex] = temp;
            }
            while(beindex<enindex&&value>=arry[beindex]) {
                beindex++;
            }//缩小边界

            if(value<beindex) {
                int temp = arry[enindex];
                arry[enindex] = arry[beindex];
                arry[beindex] = temp;
            }

        }

        if(begin<enindex--) {
            fastarry(arry,beindex,enindex--);
        }
        if(end>beindex++) {
            fastarry(arry,beindex++,end);
        }

    }
}
冒泡
//冒泡:拿第一个数和相邻比较,再拿比较出大的数和下一个比较;

public static void soryArraymaopao(int[] arr){
        for(int j=arr.length-1;j>0;j--){//倒着冒泡
            for(int i=0;i<j;i++){//正着冒泡
                if(arr[i]>arr[i+1]){ //相邻两个数比较
                    int temp = arr[i];
                    arr[i] = arr[i+1];
                    arr[i+1] = temp;
                }
            }
        }
    }
选择
//选择:拿第一个数,一次比较,小的放第一个位置,直到寻找完,最小放到第一个位置;
public static void sortArray(int[] arr){
        for(int j=0;j<arr.length-1;j++){
            for(int i=j+1;i<arr.length;i++){
                if(arr[j]<arr[i]){
                    int temp= arr[j];
                    arr[j]=arr[i];
                    arr[i]=temp;
                }
            }
        }
    }

回文

public class huiwen {

    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入行:");
        int lowC = scan.nextInt();
        System.out.println("请输入列:");
        int colC = scan.nextInt();
        int arr[][] = new int [lowC][colC];//输入的行列用于初始化数组,和总和;
        int number= 1;//起始数字
        arr[0][0] = number;
        int sum = lowC*colC;



        setarray(arr,sum,number,0,0);//初始开始的位置和数据

        for(int[] tmp:arr) {
            for(int t:tmp) {
                System.out.print(t+"\t");//空格
            }
            System.out.println();//换行
        }
    }

    private static void setarray(int[][] arr, int sum, int number, int low, int col) {
        // TODO Auto-generated method stub
        while(number < sum) {
            while(col<arr[low].length-1&&arr[low][col+1]==0) {//向右
                arr[low][++col] = ++number;
            }
            while(low<arr.length-1&&arr[low+1][col]==0) {//向下
                arr[++low][col] = ++number;
            }
            while(col>0&&arr[low][col-1]==0) {//向左
                arr[low][--col] = ++number;
            }
            while(low>0&&arr[low-1][col]==0) {//向上
                arr[--low][col] = ++number;
            }
        }
    }
}

二分查找

public class Binary {
    public static void main(String[] args) {
        int[] arr = {1,2,3,4,5,6,7,8,9};
        int value = BinarySearch(arr,8,0,arr.length-1);
        System.out.println(value);
    }

    private static int BinarySearch(int[] arr, int find, int begin, int end) {
        // TODO Auto-generated method stub
        int mid = (begin+end)/2;
        if(begin==end) {
            return -1;
        }
        if(end<=begin) {
            return -1;
        }
        if(find>arr[mid]) {
            begin = mid+1;
            return BinarySearch(arr, find, begin, end);
        }
        if(find < arr[mid]) {
            end = mid-1;
            return BinarySearch(arr, find, begin, end);
        }
        return mid;
    }


}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值