java常见排序算法

快速排序

选取一个初始值(一般是第一个),将排序分为小于初始值和大于初始值的两部分,然后重复此操作,直到排序完成。

空间复杂度最坏为O(n),平均为O(log2n)

时间复杂度最坏为O(n2),最好为O(nlog2n),平均(nlog2n)

 

冒泡排序

设待排序的序列长度为n,从前往后两两比较相邻元素的值,根据升序或降序交换两两元素的位置,直到整个序列比较完成,称为一趟冒泡排序,执行完n-1趟冒泡即可将所有元素排好。

空间复杂度为O(1)

时间复杂度最坏为O(n2),最好为O(n),平均为O(n2)

 

直接插入排序

将元素分为有序区[0...i-1]和无序区[i..n-1]将R[i]插入到[0..i-1]中,并且使插入后的区域有序。当一个元素序列越接近有序,性能越好。是稳定的算法。

空间复杂度为O(1)

时间复杂度最坏为O(n2),最好为O(n),平均为O(n2)

 

折半插入排序

思想与直接插入排序相同,区别在于折半插入排序在将元素插入到有序区时,使用的二分查找,可以减少关键字的比较次数。是一个稳定算法

空间复杂度为O(1)

时间复杂度平均为O(n2)

 

希尔排序

将待排序元素按照下标进行增量分组,对每一组的元素采用直接插入排序,随着增量逐渐减少,所分成的组所含的元素越来越多,直到增量变成了1,所有的元素在一个分组中,即完成了排序

 

posted @ 2019-10-31 10:10  javadongx  阅读(134)  评论(0编辑  收藏  举报

javadong@qq.com