• Java的三个基础排序算法(其余将在以后补充)


    第一个:冒泡排序算法

    原理:相邻的两个值进行比较,如果前面的比后面的大就交换位置

    eg:假设有5个元素的一个array

    • 第一次:会比较4次,将最大的值放在最右边
    • 第二次:会比较3次,又排出剩余4个元素的最大值
    • 依次向下,知道最后一个,这样数组就算是排完了
    package day16_nullnull;
    
    import java.util.Arrays;
    
    //冒泡排序算法的例子
    
    public class null01_BubbleSort {
    
        public static void main(String[] args) {
            int[] arr = {55,22,11,33,77,66};
            //总共是要需要通过length-1次达到排序效果
            for(int i=0;i<arr.length;i++){
                //第一次0-1 1-2 2-3 3-4 4-5
                //第二次0-1 1-2 2-3 3-4
                //依次向下
                for(int j=0;j<arr.length-i-1;j++){
                    System.out.println(j+"-"+(j+1));
                    if(arr[j]>arr[j+1]){
                    
                        arr[j] = arr[j]^arr[j+1];
                        arr[j+1] = arr[j]^arr[j+1];
                        arr[j] = arr[j]^arr[j+1];
                        
                    }
                }
                System.out.println("************");
            }
            System.out.println(Arrays.toString(arr));
        }
    
    }

    第二个:数组高级选择排序

    原理:和上面的冒泡排序几乎是刚好相反,它会将小的向左边放,直到全部排序结束

    package day16_nullnull;
    
    import java.util.Arrays;
    
    //数组高级选择排序
    
    public class null02ArrayAdvancedSelectionSorting {
    
        public static void main(String[] args) {
            int[] arr = {99,55,33,44,77,66,11};
            //同上一个,也是需要经过length-1次排序
            for(int i=0;i<arr.length-1;i++){
                for(int j=i+1;j<arr.length;j++){
                    int tmp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = tmp;
                }
            }
            System.out.println(Arrays.toString(arr));
        }
    
    }

    第三个:数组高级二分查找(折半查找)

      二分查找又称为折半查找(让我想到了初中的一些数学题),目的是查找元素的索引,优点是查找次数少了,速度会快一些,平均性能好。但是却有一个前提,就是等待查询的数组啊必须是有序的(他要折半找最小最大中间值)。

    package day16_nullnull;
    
    //二分查找的例子
    
    public class null03_BinarySearch {
    
        public static void main(String[] args) {
            int[] arr = {11,22,33,44,55,66,77,88};
            int max = arr.length-1;//取出最大值的索引
            int min = 0;//指定最小值的索引
            int mid = (min + max) / 2; //求出中间值的索引
            int find = 66; //指定想要找到的值
            while(find!=arr[mid]){
                if(find<arr[mid]){
                    max = mid-1;
                }else{
                    min = mid + 1;
                }
                mid = (min+max) / 2;
                if(min>max){
                    System.out.println("找不到");
                    System.exit(0);
                }
            }
            System.out.println("index:"+mid);
    
        }
    
    }
  • 相关阅读:
    TF400916错误修复办法
    架构优化
    .net 动态代理的泛型方法支持问题
    解决Kafka-1194问题
    SOA服务总线设计
    SOA初探
    重构心法——提高代码复用率
    重构心法——拆分大对象
    重构心法——你应该这样写方法
    反爬虫那些事儿
  • 原文地址:https://www.cnblogs.com/smiling-crying/p/9333363.html
Copyright © 2020-2023  润新知