简单排序算法

排序是项目中经常使用的算法,下面简单说一下三种简单排序

1. 选择排序,选择排序应该是所有排序算法中最直接最简单的排序,经过N-1趟比较好,序列形成有序列表,具体算法是,每一趟找到最大或者最小值,之后交换,依次循环n-1次,所有时间复杂度未O(n2)

实现:

public static void selectSort(int[] arr) {
        long start = System.currentTimeMillis();
        for (int i = 0; i < arr.length - 1; i++) {
            int min_index = i;
            for (int j = i + 1; j < arr.length; j++) {
                // find index of min value
                if(arr[min_index]>arr[j]) min_index = j;
            }
            // swap
            if(min_index != i){
                int tmp = arr[i];
                arr[i] = arr[min_index];
                arr[min_index] = tmp;
            }
        }
        System.out.printf("简单排序算法	运行时间%dms
",(System.currentTimeMillis() - start));
    }

2.冒泡排序,冒泡是一种经典排序算法,每一趟当前值都会和相邻元素比较,每趟结束后就后最大/最小值就会浮出水面,经过n-1次迭代之后,数组有序

算法:

public static void bubbleSort(int[] arr){
        long start = System.currentTimeMillis();
        for(int i =0;i<arr.length-1;i++){
            for(int j = 0;j<arr.length-1-i;j++){
                if(arr[j] > arr[j+1]){
                    int tmp = arr[j];
                    arr[j] = arr[j+1];
                    arr[j+1] = tmp;
                }
            }
        }
        System.out.printf("冒泡算法	运行时间%dms
",(System.currentTimeMillis() - start));
    }

3. 直接插入排序,插入排序是每一步将待排序元素插入到前面已排好序序列中,知道插入完成

public static void insertSort(int[] arr){
        long start = System.currentTimeMillis();
        for (int i = 1 ;i< arr.length;i++){
            int j = i;
           while (j > 0 && arr[j] < arr[j-1]){
               int tmp = arr[j];
               arr[j]= arr[j-1];
               arr[j-1] = tmp;
               j--;
           }
        }
        System.out.printf("直接插入算法	运行时间%dms
",(System.currentTimeMillis() - start));
    }
原文地址:https://www.cnblogs.com/yunfeiqi/p/7890173.html