初级排序算法
参考博客: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还要小。