首页 > 编程语言 > 详细

java排序

时间:2020-01-09 18:26:20      阅读:76      评论:0      收藏:0      [点我收藏+]

时间复杂度:

在一段逻辑中,找到会必然发生并且重复执行的代码,将这段代码的执行时间看作单位1,考虑随着元素个数增多,单位1的执行次数
在时间复杂度中,一般不考虑系数,除非系数足够大,能够影响变化趋势
在时间复杂度中,一般考虑影响最大的一项

冒泡/选择排序的时间复杂度:O(n^2)
二分查找的时间复杂度:O(logn)

稳定性:

假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。

package com.sort;

import java.util.Arrays;

public class Sort {
    public static void main(String[] args) {
        int[] array = {2,5,9,8,6,5,7,3};
        System.out.println(Arrays.toString(bubbleSort(array)));
        System.out.println(Arrays.toString(selectionSort(array)));
        System.out.println(Arrays.toString(insertSort(array)));
    }
    
    /**
     * 冒泡排序
     * 算法原理:
     * 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
          对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。
          在这一步,最后的元素应该会是最大的数。
          针对所有的元素重复以上的步骤,除了最后一个。
             持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
     */
    public static int[] bubbleSort(int[] array){
        if(array.length == 0){
            return array;
        }
        for(int i = 0; i < array.length - 1; i++){
            for(int j = 0; j < array.length-1-i; j++){
                if(array[j]>array[j+1]){
                    int temp = array[j+1];
                    array[j+1] = array[j];
                    array[j] = temp;
                }
            }
        }
        return array;
    }
    
    /**
     * 选择排序
     * 算法原理:
     * 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置
     * 然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾
     * 以此类推,直到所有元素均排序完毕
     */
    public static int[] selectionSort(int[] array){
        if(array.length == 0){
            return array;
        }
        for(int i = 0; i < array.length; i++){
            int minIndex = i;
            for(int j = i; j < array.length; j++){
                if(array[j]<array[minIndex]){
                    minIndex = j;
                }
            }
            int tmp = array[minIndex];
            array[minIndex] = array[i];
            array[i] = tmp;
        }
        return array;
    }
    
    /**
     * 插入排序
     * 算法原理:
     * 把n个待排序的元素看成为一个有序表和一个无序表
     * 开始时有序表中只包含一个元素,无序表中包含有n-1个元素
     * 排序过程中每次从无序表中取出第一个元素
     * 把它的排序码依次与有序表元素的排序码进行比较
     * 将它插入到有序表中的适当位置使之成为新的有序表
     */
    public static int[] insertSort(int[] array){
        if(array.length == 0){
            return array;
        }
        for(int i = 1; i < array.length; i++){
            int tmp = array[i]; //tmp为要插入的元素
            int j = i - 1; //j为有序数组的最后一个元素的下标
            while(j >= 0 && tmp < array[j]){
                array[j+1] = array[j];
                j--;
            }
            array[j+1] = tmp;
        }
        return array;
    }
    
}

java排序

原文:https://www.cnblogs.com/jlsblog/p/12168665.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!