选择,冒泡,插入排序,折半查找

/*
 * 选择排序:
 *       每一次比较完成时最小值出现在最小索引处
 * 
 * */

public class XuanZedemo {
    public static void main (String [] args){
        //先定义好一个数组
        int []arr = {5,6,8,4,3,0,9};
        System.out.print("排序前:");
        for(int i =0;i<arr.length;i++){
            System.out.print(arr[i]+" ");
        }
        System.out.println();
        //选择排序
        //先定义一个中间变量
        int temp;
        for(int i =0;i<arr.length-1;i++){
            for(int j=i+1;j<arr.length;j++){
                if(arr[i]>arr[j]){
                    temp=arr[j];
                    arr[j]=arr[i];
                    arr[i]=temp;
                }
            }
        }
        System.out.print("排序后:");
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+" ");
        }
    }

}
结果:

排序前:5 6 8 4 3 0 9 
排序后:0 3 4 5 6 8 9 

public class MaoPaodemo {
    public static void main (String [] args){
        //先定义一个数组
        int [] arr = {5,6,8,4,2,9,12};
        System.out.print("排序前:");
        for(int i =0;i<arr.length;i++){
            System.out.print(arr[i]+" ");
        }
        System.out.println();
        System.out.print("排序后:");
        //定义一个中间变量
        int temp;
        for(int i = 0 ; i<arr.length-1;i++){
            //第一层for循环是表示比较的趟数
            for(int j=0;j<arr.length-1-i;j++){
                //在这里要保证j+1最终不能下标越界,所以你要保证j+1<arr.length
                //由于每一趟的比较下一次的比较就会少一次因此为了减少没必要的比较则每次下来减一次
                    if(arr[j]>arr[j+1]){
                        temp=arr[j];
                        arr[j]=arr[j+1];
                        arr[j+1]=temp;              }
                }       
        }
        for(int i=0;i<arr.length;i++){
            System.out.print(arr[i]+" ");
        }
    }

}
结果:

排序前:5 6 8 4 2 9 12 
排序后:2 4 5 6 8 9 12 

public class ChaRudemo {
    public static void main(String[] args) {
        int[] arr = { 4, 5, 6, 8, 1, 2 };
        System.out.print("排序前:");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
        System.out.println();
        ChaRu(arr);
        System.out.print("排序后:");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }

    private static void ChaRu(int[] arr) {
        // 我们假设首位已经排好序了
        // 这样我们只需遍历1-arr.length-1个元素
        int i, j;
        int target;
        for (i = 1; i < arr.length; i++) {
            j = i;
            target = arr[i];// target目的是为了保存之前的数据
            while(j > 0 && target < arr[j - 1]) {
                arr[j] = arr[j - 1];
                j--;
            }
            arr[j] = target;//最终将target放入指定位置
        }

    }
}
结果:

排序前:4 5 6 8 1 2 
排序后:1 2 4 5 6 8 

/*
 * 数组高级部分:查找
 * 
 *          基本查找:数组元素查表法(查询数组中的元素第一次在数组中出现的索引):从头查到尾
 *          
 *          数组二分查找(折半查找)
 * 
 *      思路:
 *          1)定义最大索引和最小索引
 *          2)计算出中间索引:
 *              如果要查的元素和中间索引对应的元素相等,返回中间索引
 *              如果不想等
 *                  大了,左边找
 *                  小了右边找
 *          3)重写计算出中间索引:
 *              大了:max = mid -1 ;
 *              小了:min = mid+1 ;
 *          4)继续回到(2)进行重新计算在查找!
 * */

import java.util.Scanner;

public class ZheBandemo {
    public static void main(String[] args) {
        // 折半查找,必须是有序的数组
        Scanner in = new Scanner(System.in);
        int[] arr = { 1, 2, 3, 4, 5, 6, 8, 9 };
        System.out.println("请输入你要查询的数字:");
        int num = in.nextInt();
        int index = findNum(num, arr);
        if (index == -1) {
            System.out.println("你要的查询的数字不存在!!!");
        }else{
        System.out.println("你要的查询的数字" + num + "的下标是" + index);
        }
    }

    private static int findNum(int num, int[] arr) {
        int minIndex = 0;
        int maxIndex = arr.length - 1;
        int midIndex = (minIndex + maxIndex) / 2;
        // 开始查找数
        while (arr[midIndex] != num) {
         //依据的条件是:中间索引的值是否是要查找的数
            if (arr[midIndex] > num) {
                maxIndex = midIndex - 1;
            } else if (arr[midIndex] < num) {
                minIndex = midIndex + 1;
            }
            if (minIndex > maxIndex) {

                return -1;
            }
            midIndex = (minIndex + maxIndex) / 2;
        }
        return midIndex;
    }
}
结果:

请输入你要查询的数字:
5
你要的查询的数字5的下标是4
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值