初级排序算法
参考博客:https://www.cnblogs.com/guoyaohua/p/8600214.html
1.冒泡排序
冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
最佳情况:T(n) = O(n) 最差情况:T(n) = O(n2) 平均情况:T(n) = O(n2)
https://images2017.cnblogs.com/blog/849589/201710/849589-20171015223238449-2146169197.gif
2.选择排序
表现最稳定的排序算法之一,因为无论什么数据进去都是O(n2)的时间复杂度,所以用到它的时候,数据规模越小越好。唯一的好处可能就是不占用额外的内存空间了吧。理论上讲,选择排序可能也是平时排序一般人想到的最多的排序方法了吧。
https://images2017.cnblogs.com/blog/849589/201710/849589-20171015224719590-1433219824.gif
最佳情况:T(n) = O(n2) 最差情况:T(n) = O(n2) 平均情况:T(n) = O(n2)
3.插入排序
插入排序(Insertion-Sort)的算法描述是一种简单直观的排序算法。它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。
https://images2017.cnblogs.com/blog/849589/201710/849589-20171015225645277-1151100000.gif
最佳情况:T(n) = O(n) 最坏情况:T(n) = O(n2) 平均情况:T(n) = O(n2)
代码实现
public class maopao {
// 冒泡排序
private static int[] bubbleSort(int[] array) {
if(array.length == 0)
return array;
int tmp = 0;
for(int i=0;i<array.length;i++) {
for(int j=0;j<array.length-i-1;j++) {
if(array[j]>array[j+1]) {
tmp = array[j];
array[j] = array[j+1];
array[j+1] = tmp;
}
}
}
return array;
}
// 选择排序
private 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;
}
// 插入排序
private static int[] insertionSort(int[] array) {
if(array.length == 0)
return array;
int current;
for(int i=0;i<array.length-1;i++) {
current = array[i+1];
int preIndex = i;
while(preIndex>=0 && current<array[preIndex]) {
array[preIndex+1] = array[preIndex];
preIndex--;
}
array[preIndex+1] = current;
}
return array;
}
// 归并排序法
// 快速排序法
// 堆排序法
public static void main(String[] args) {
int[] array = {21,23,5,67,8};
for(int i=0;i<array.length;i++) {
System.out.print(array[i]+" ");
}
System.out.println();
array = insertionSort(array);
for(int i=0;i<array.length;i++) {
System.out.print(array[i]+" ");
}
}
} 相关推荐
要知道时间复杂度只是描述一个增长趋势,复杂度为O的排序算法执行时间不一定比复杂度为O长,因为在计算O时省略了系数、常数、低阶。实际上,在对小规模数据进行排序时,n2的值实际比 knlogn+c还要小。