排序是项目中经常使用的算法,下面简单说一下三种简单排序
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)); }