zoukankan      html  css  js  c++  java
  • 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);
    
        }
    
    }
  • 相关阅读:
    [CodeForces]Codeforces Round #429 (Div. 2) ABC(待补)
    About Me
    2018-06-14
    Codeforces Codeforces Round #484 (Div. 2) E. Billiard
    Codeforces Codeforces Round #484 (Div. 2) D. Shark
    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) F. Isomorphic Strings
    Codeforces Educational Codeforces Round 44 (Rated for Div. 2) E. Pencils and Boxes
    Codeforces Avito Code Challenge 2018 D. Bookshelves
    Codeforces Round #485 (Div. 2) D. Fair
    Codeforces Round #485 (Div. 2) F. AND Graph
  • 原文地址:https://www.cnblogs.com/smiling-crying/p/9333363.html
Copyright © 2011-2022 走看看