Java数据结构与算法

1 、数组

1.1 数组选择排序

package test.javase.array;

import java.util.Arrays;

/**
 * @author zhangxuhui
 * @email [email protected]
 * @create 2020-03-14 18:20
 *
 * 选择排序:
 *   认为第一位的元素为最小值,与其后的每一个元素比较。
 *   如果后面的元素比第一个元素小,则二者交换位置,那么一轮后
 *   第一索引位置上的元素就是数组中最小的元素。
 *   如果是最后一个元素则不用比较,那么将比较arr.length-1轮。
 * 	 比较一轮后再从第二个元素开始比较,依次类推,
 */
public class XuanZePaiXu {
    public static void main(String[] args) {
        int[] ns = { 28, 12, 89, 73, 65, 18, 96, 50, 8, 36 };
        String str = Arrays.toString(ns);
        System.out.println("排序前数组:"+str);
        //Arrays.sort(ns);
        //System.out.println("工具类排序:"+Arrays.toString(ns));

        System.out.println("手工实现数组选择排序。。。。。。");

        //如果是最后一个元素,则不用比较。
        for(int i = 0 ; i < ns.length-1;i++){
            for(int j = i + 1 ; j < ns.length ; j++){
                if(ns[i] > ns[j]){
                    int temp = ns[i];
                    ns[i] = ns[j];
                    ns[j] = temp;
                }
            }
        }
        System.out.println("选择排序后:"+Arrays.toString(ns));
    }
}

1.2 数组冒泡排序

package test.javase.array;

import java.util.Arrays;

/**
 * @author zhangxuhui
 * @email [email protected]
 * @create 2020-03-17 12:41
 *
 * 冒泡排序:
 *    选择排序是从第一个元素开始与后面的每一个元素比较,然后交换位置。
 *    冒泡排序则是从第一个元素开始,每相邻的元素比较然后交换位置。
 *    每次从首位开始,比较一轮后末尾就是数组中的最大值,
 *    第二轮比较中就不再比较末尾的元素,
 *    最后一轮就剩一个元素就不必再比较,
 *    那么n个元素的数组,则比较n-1轮。
 *
 *    一次类推。。。
 */
public class MaoPaoPaiXu {
    public static void main(String [] args){
        int[] ns = { 28, 12, 89, 73, 65, 18, 96, 50, 8, 36 };
        System.out.println("排序前:"+Arrays.toString(ns));

        /**
         * 外层循环控制比较的次数。内层循环控制真正的比较交换操作。
         * 因为比较的是ns[k+1]所以k

        for(int i = 0 ; i < ns.length- 1; i++){
            for(int  k = 0 ; k < ns.length - i -1 ; k++){
                if(ns[k] > ns[k+1]){
                    int tmp = ns[k];
                    ns[k] = ns[k+1];
                    ns[k+1] = tmp;
                 }
            }
        }
        System.out.println("排序后:"+Arrays.toString(ns));
    }
}

1.3 数组二分查找

package test.javase.array;

import java.util.Arrays;

/**
 * @author zhangxuhui
 * @email [email protected]
 * @create 2020-03-17 13:43
 * 二分查找法:首先对数组进行排序,折半查找,先计算出中间值
 * 如果比中间值大,则在中间值的右侧,否则就在左侧,循环折半查找
 * 直到查找的值等于中间值,退出循环。
 */
public class MiddleSerarch {
    public static void main(String[] args) {
        int[] ns = { 28, 12, 89, 73, 65, 18, 96, 50, 8, 36 };
        Arrays.sort(ns);
        System.out.println(Arrays.toString(ns));
        int num = 28;

        int max = ns.length-1;
        int min = 0;

        while (min<=max){
            int midlle = (max+min)/2;
            if(num == ns[midlle]){
                System.out.println(num+"索引位置为"+midlle);
                break;
            }
            if(num > ns[midlle]){
                min = midlle+1;
            }
            if(num < ns[midlle]){
                max = midlle-1;
            }
        }


    }
}

你可能感兴趣的:(Java)