• 5种排序算法


    5种排序算法


    冒泡排序

    依次比较相数字,顺序错误就交换,直到没有相邻元素需要交换。

    public static void main(String[] args) {
        Random random = new Random();
        int a[] = new int[10];
        // 初始化一个数组
        for (int i = 0; i < a.length; i++) {
            a[i] = random.nextInt(100);
            System.out.print(a[i] + "	");
        }
        
        for (int i = 0; i < a.length-1; i++) {
            for (int j = 0; j < a.length-i-1; j++) {
                if (a[j] > a[j+1]) {		// 相邻数字比较排序
                    int temp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = temp;
                }
            }
        }
        System.out.println();
        for (int i = 0; i<a.length; i++) {
            System.out.print(a[i] + "	");
        }	
    }
    

    快速排序

    ​通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。

    public void sort(int arr[], int start, int end) {
        if (start > end) {
            return ;
        }
        int i = start;
        int j = end;
        int key = arr[i]; // 基准位
    
        while (i < j) {
            while (i < j && arr[j] > key) {
                j--;
            }
            arr[i] = arr[j];
            while (i < j && arr[i] < key) {
                i++;
            }
            arr[j] = arr[i];
        }
        arr[i] = key;
        sort(arr, start, i - 1);
        sort(arr, i+1, end);
    }
    

    选择排序

    ​ 每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。

    for (int i = 0; i < a.length; i++) {
        for (int j = i + 1; j < a.length; j++) {
            if (a[j] < a[i]) {
                int temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
        }
    }
    

    插入排序

    ​ 将一个数据插入到已经排好序的有序数据中,从而得到一个新的、个数加一的有序数据。

    for (int i= 0; i <a.length; i++) {
        for (int j = 0; j < i; j++) {
            if (a[i] < a[j]) {
                int temp = a[i];
                a[i] = a[j];
                a[j] = temp;
            }
        }
    }
    

    归并排序

    ​ 先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。

    public static int[] sort(int[] a, int low, int high) {
        int mid = (low + high) / 2;
        if (low < high) {
            sort(a, low, mid);
            sort(a, mid + 1, high);
            // 左右归并
            merge(a, low, mid, high);
        }
        return a;
    }
    
    public static void merge(int[] a, int low, int mid, int high) {
        int[] temp = new int[high - low + 1];
        int i = low;
        int j = mid + 1;
        int k = 0;
        // 把较小的数先移到新数组中
        while (i <= mid && j <= high) {
            if (a[i] < a[j]) {
                temp[k++] = a[i++];
            } else {
                temp[k++] = a[j++];
            }
        }
        // 把左边剩余的数移入数组
        while (i <= mid) {
            temp[k++] = a[i++];
        }
        // 把右边边剩余的数移入数组
        while (j <= high) {
            temp[k++] = a[j++];
        }
        // 把新数组中的数覆盖nums数组
        for (int x = 0; x < temp.length; x++) {
            a[x + low] = temp[x];
        }
    }
    
  • 相关阅读:
    【Android测试】Android截图的深水区
    【Android测试】UI自动化代码优化之路
    网页爬虫小试牛刀
    【Android测试】【第十九节】Espresso——API详解
    【iOS测试】【随笔】帧率FPS评测
    【iOS测试】【随笔】崩溃日志获取
    【后台测试】Linux下小试jmeter
    【后台测试】手把手教你jmeter压测
    【行业交流】2016 TiD质量竞争力大会——移动互联网测试到质量的转变之路
    【Android测试】【第十八节】Espresso——环境搭建
  • 原文地址:https://www.cnblogs.com/wuxie0ne/p/10672611.html
Copyright © 2020-2023  润新知