• 数组排序


    一 概述

    1.双层循环

    排序通常由双层循环实现,外层循环控制循环轮数,内层循环实现单次排序。外层循环的索引从1到arr.length-1,内层循环循环次数随外层循环循环次数的增加而减少。

    二 冒泡法

    1.基本思想

    对比相邻的两个元素,如果满足条件,则交换位置,这样就把较大的元素移动到后面了。

    2.算法实现

    public static int[] bubbleSort(int[] arr) {
            for (int i = 1; i < arr.length; i++) {
                for (int j = 0; j < arr.length - i; j++) {
                    if (arr[j] > arr[j + 1]) {
                        int temp = arr[j];
                        arr[j] = arr[j + 1];
                        arr[j + 1] = temp;
                    }
                }
            }
            return arr;
        }

    三 直接排序

    1.基本思想

    从未排序序列中筛选出最大值,放在未排序序列的尾部。外层循环循环一次,交换未排序序列最大值与未排序序列最后一个元素的位置,其他元素位置不变,关键是获取最大值的索引。直接排序比冒泡排序快。

    内层循环切入点:假定未排序序列第一个即索引为0的元素为最大值,然后将其与剩余元素进行对比,获取最大值的索引。

    2.算法实现

    public static int[] directSort(int[] arr) {
            int len = arr.length;
            int index;
            for (int i = 1; i < len; i++) {
                index = 0;
                for (int j = 1; j <= len - i; j++) {
                    if (arr[index] < arr[j]) {
                        index = j;
                    }
                    int temp = arr[len - i];
                    arr[len - i] = arr[index];
                    arr[index] = temp;
                }
            }
            return arr;
        }

    四 反转排序

    1.基本思想

    交换索引和为arr.length-1的两个元素的位置,只需一层循环,循环次数为arr.length/2-1。

    2.算法实现

    public static int[] reverseSort(int[] arr) {
            for (int i = 0; i < arr.length / 2; i++) {
                int temp = arr[i];
                arr[i] = arr[arr.length - 1 - i];
                arr[arr.length - 1 - i] = temp;
            }
            return arr;
        }
  • 相关阅读:
    设计模式之动态代理
    设计模式之单例模式
    WinDbg调试高内存的.Net进程Dump
    ping 和 远程桌面 与防火墙的关系
    log4net性能小探
    html页面缓存问题
    casperjs在拆分文件后的中文乱码问题的解决
    casperjs userAgent的一些问题
    浅谈并查集
    当你感到学习困难的时候,你在走上坡路!
  • 原文地址:https://www.cnblogs.com/tonghun/p/7141167.html
Copyright © 2020-2023  润新知