アルゴリズムのソートと検索

内容:バブルソート選択ソート再帰バイナリ検索すばやくソートソートします

バブルソート:


/ **
 * バブルソート
 * YZ ON 2018年3月13日によって作成。
 * /
パブリッククラスバブルソート{
    パブリック静的無効メイン(文字列[] args){
        INT [] = {24,69,80,57,13 ARR };
        //は、Arrays.sort(ARR)は、
        法律1 //:アレイの気泡長さの数が-1
        (INT I = 0; I <arr.length-1; I ++)用{
            //法則2:あたり配列の長さであるバブルにこれは2つの数を比較する-時間の比較
            のために(INT J = 0; J <-arr.length 1-I; J ++){
                //二つの隣接する要素を比較
                (ARR場合[J]> ARR [J + 1]){
                    int型ARR TEMP = [J];
                    ARR [J] = ARR [J + 1];
                    ARR = TEMP [J + 1];
                }
            }
        }
        System.out.println(Arrays.toString(ARR))。
    }

}

並び替えを選択:


/**
 * 选择排序
 * Created by yz on 2018/3/13.
 */
public class SelectSort {
    public static void main(String[] args) {
        int[] arr = {24,69,80,57,13};
        // 比较排序要进行数组长度-1次的比较排序
        for (int i = 0; i < arr.length - 1; i++) {
            // 每一次比较排序要进行数组长度-第几次比较排序
            for (int j = i+1; j < arr.length; j++) {
                // 相邻两个元素比较
                if(arr[i]>arr[j]){
                    int temp = arr[i];
                    arr[i]=arr[j];
                    arr[j]=temp;
                }
            }
        }
        System.out.println(Arrays.toString(arr));
    }
}

二分查找 :


/**
 * 二分查找,前提数组有序
 * Created by yz on 2018/3/13.
 */
public class BinaryFind {
    public static void main(String[] args) {
        int[] arr = {11,22,33,44,55};
        // 定义一个要查找的变量
        int find = 55;
        System.out.println(getIndex(arr,find));
    }

    private static int getIndex(int[] arr, int find) {
        // 在进行查找之前要确定三个位置
        // min(最小位置) max(最大位置) mid(中间位置) 总是要根据中间位置(mid)的位置的值来确定是不是要查找的值
        int min = 0;
        int max = arr.length-1;
        int mid = (min+max)/2;
        // 如果要查找的值不等于中间这个位置的值的话就不停的查找
        while (arr[mid] != find){
            // 如果要查找的值比中间的位置的值要大,就从右边开始查找 确定要查找的范围
            if(find>arr[mid]){
                min = mid+1;
            }
            // 如果要查找的值比中间的位置的值要小,就从左边开始查找 确定要查找的范围
            if(find<arr[mid]){
                max = mid-1;
            }
            mid = (min+max)/2;
            if(min > max ){
                return -1;
            }
        }
        // 如果等于的话就证明mid这个位置的值就是要查找的值,就直接返回
        return mid;
    }
}

快速排序和递归排序:

/**
 * 常用算法
 * Created by yz on 2018/03/05.
 */
public class Test {

    /**
     * 快速排序测试
     * @param args
     */
    public static void main(String[] args) {
        int[] ints = {5,3,7,8,2,9,4,6};
        sort(ints,0,ints.length-1);
        for (int i = 0; i < ints.length; i++) {
            System.out.print(ints[i]+" ");
        }
    }


    /**
     * 快速排序 第一步
     * @param ints
     * @param start
     * @param end
     * @return
     */
    private static int sortUnit(int[] ints ,int start ,int end){
        int num = ints[start]; //标杆
        int i = start;
        int j = end;
        while (i<j){
            while(i<j){
                if(ints[j]<num){ // j负责找小的,扔个i
                    ints[i] = ints[j];
                    break;
                }
                j--;
            }
            while(i<j){
                if(ints[i]>=num){ // i负责找大的,扔个j
                    ints[j] = ints[i];
                    break;
                }
                i++;
            }
        }
        ints[i] = num;
        return i;
    }


    /**
     * 快速排序 第二步
     * @param ints
     * @param start
     * @param end
     */
    private static void sort(int[] ints ,int start ,int end){
        if(start<end){
            int index = sortUnit(ints,start,end);// 返回中间值,中间值左右两边继续排序
            sort(ints,start,index-1); // 左边
            sort(ints,index+1,end);  // 右边
        }
    }


    /**
     * 递归排序
     * @param file
     */
    private static void findFile(File file){
        File[] files = file.listFiles();
        for (int i = 0; i < files.length; i++) {
            if(files[i].isFile()){ // 文件
                System.out.println(files[i].getName());
            }else{
                findFile(files[i]);
            }
        }
    }
}

发布了43 篇原创文章 · 获赞 32 · 访问量 4万+

おすすめ

転載: blog.csdn.net/yz2015/article/details/79543248