zoukankan      html  css  js  c++  java
  • Java常用算法总结

    冒泡排序

    从左到右不断交换相邻逆序的元素,在一轮的循环之后,可以让未排序的最大元素上浮到右侧。
    在一轮循环中,如果没有发生交换,那么说明数组已经是有序的,此时可以直接退出。

    代码如下:

    public static int[] sort(int[] array) {
            int temp = 0;
            // 外层循环,它决定一共走几趟 //-1为了防止溢出
            for (int i = 0; i < array.length - 1; i++) {
                int flag = 0; //通过符号位可以减少无谓的比较,如果已经有序了,就退出循环
                //内层循环,它决定每趟走一次
                for (int j = 0; j < array.length - i - 1; j++) {
                    //如果后一个小于前一个,则换位
                    if (array[j + 1] < array[j]) {
                        temp = array[j];
                        array[j] = array[j + 1];
                        array[j + 1] = temp;
                        flag = 1;
                    }
                }
                if (flag == 0) {
                    break;
                }
            }
            return array;
        }

    选择排序

    从数组中选择最小元素,将它与数组的第一个元素交换位置。再从数组剩下的元素中选择出最小的元素,将它与数组的第二个元素交换位置。
    不断进行这样的操作,直到将整个数组排序。

    代码如下:
    public static int[] sort(int arr[]) {
            int temp = 0;
            for (int i = 0; i < arr.length - 1; i++) {// 认为目前的数就是最小的, 记录最小数的下标
                int minIndex = i;
                for (int j = i + 1; j < arr.length; j++) {
                    if (arr[minIndex] > arr[j]) {// 修改最小值的下标
                        minIndex = j;
                    }
                }// 当退出for就找到这次的最小值,就需要交换位置了
                if (i != minIndex) {//交换当前值和找到的最小值的位置
                    temp = arr[i];
                    arr[i] = arr[minIndex];
                    arr[minIndex] = temp;
                }
            }
            return arr;
        }

    插入排序

    每次都将当前元素插入到左侧已经排序的数组中,使得插入之后左侧数组依然有序。

    代码如下:

    public static int [] sort(int[] arr){
            //遍历所有的数字
            for(int i=1;i<arr.length;i++){
                //如果当前数字比前一个数字小
                if(arr[i]<arr[i-1]){
                    //把当前遍历数字存起来
                    int temp=arr[i];
                    int j;
                    //遍历当前数字前面的所有数字
                    for(j=i-1;j>=0&&temp<arr[j];j--){
                        //把前一个数字赋给后一个数字
                        arr[j+1]=arr[j];
                    }
                    //把临时变量(外层for循环的当前元素)赋值给不满足条件的后一个元素
                    arr[j+1]=temp;
                }
            }
            return arr;
        }
  • 相关阅读:
    (九)MySQL用户和权限管理
    activemq修改admin密码
    zookeeper与activemq整合
    (十一)数组array
    (十)while和until循环
    (八)MySQL索引操作
    查看MySQL是否在运行
    MySQL的启动和关闭
    常用的Web服务器软件整理
    [CodeForce 801A] Vicious Keyboard
  • 原文地址:https://www.cnblogs.com/emadons/p/11815625.html
Copyright © 2011-2022 走看看