目录
排序的分类:
内部排序:
插入排序:
直接插入排序:
希尔排序:
选择排序:
简单选择排序:
堆排序:
交换排序:
冒泡排序:
快速排序
归并排序:
基数排序:
外部排序:
时间复杂度和空间复杂度:
时间频度:语句执行的次数。
int total = 0;int end = 100;for (int i = 1; i < end; i++) {total += i;}
写法:T(n)=n+1;语句执行了n+1次,因为最后判断一次使他退出,所以+1次。
当n值变大可以忽略:忽略常数项。忽略低次项。
排序的分类:
内部排序:
插入排序:
直接插入排序:
代码:
public class InsertSort {public static void main(String[] args) {int[] arr = new int[80000];for (int i = 0; i < arr.length; i++) {arr[i] = (int) (Math.random() * 80000);}long startTime = System.currentTimeMillis();insertSort(arr);long endTime = System.currentTimeMillis() - startTime; // 0.3}public static void insertSort(int[] arr) {for (int i = 1; i < arr.length; i++) {int tmpNum = arr[i];int j = i - 1;while (j >= 0 && tmpNum < arr[j]) {arr[j + 1] = arr[j];j--;}if (j + 1 != i) {arr[j + 1] = tmpNum;}}}
}
希尔排序:
图片演示:
选择排序:
简单选择排序:
代码:
public class SelectSort {public static void main(String[] args) {int[] arr = new int[80000];for (int i = 0; i < arr.length; i++) {arr[i] = (int) (Math.random() * 80000);}long startTime = System.currentTimeMillis();selectSort(arr);long endTime = System.currentTimeMillis() - startTime;}public static void selectSort(int[] arr) {for (int i = 0; i < arr.length - 1; i++) {int minIndex = i;for (int j = i + 1; j < arr.length; j++) {if (arr[j] < arr[minIndex]) {minIndex = j;}}if (minIndex != i) {int tmpNum = arr[i];arr[i] = arr[minIndex];arr[minIndex] = tmpNum;}}}
}
堆排序:
在二叉树的基础上。
交换排序:
冒泡排序:
代码:
public class BubbleSort {public static void main(String[] args) {int[] arr = new int[80000];for (int i = 0; i < arr.length; i++) {arr[i] = (int) (Math.random() * 80000);}long startTime = System.currentTimeMillis();bubbleSort(arr);long endTime = System.currentTimeMillis() - startTime;}public static void bubbleSort(int[] nums) {for (int i = 0; i < nums.length - 1; i++) {boolean sortEd = true; // 已顺序排序for (int j = 0; j < nums.length - 1 - i; j++) {if (nums[j] > nums[j + 1]) {int tmp = nums[j];nums[j] = nums[j + 1];nums[j + 1] = tmp;sortEd = false;}}if (sortEd) {return;}}}
}
快速排序
归并排序:
基数排序:
是桶排序的升级版。
排序算法的速度:希尔排序>插入排序>选择排序>冒泡排序
外部排序:
当数据量太大,无法全部加载到内存总时,需要借助外部存储进行排序。
参考视频:【尚硅谷】数据结构与算法(Java数据结构与算法)_哔哩哔哩_bilibili