时间复杂度
第一节讲解的是时间复杂度问题,所以在这里简单说明一下时间复杂度问题,时间复杂度为代码运行的基于单步时间的长度,时间复杂度在数学层面上为基于极限的一种思考,由于无法得知数据量本身的大小情况,因此算法运算的时间复杂度为当数据趋于无穷的时候需要花费的时间长度。在这里由于趋于无穷,因此将系数不再进行考虑,同时也只考虑最高次项,对其余次项进行忽略。
冒泡排序:
import java.util.Arrays;
public class Code_BubbleSort{
public static void bubbleSort(int arr){
if(arr == null ||arr.length<2){
return;
}
for(int end = arr.length-1;end>0;end--){
for(int i = 0;i<end;i++){
if(arr[i]>arr[i+1]){
swap(arr,i,i+1);
}
}
}
}
public static void swap(int[] arr,int i, int j){
int tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
对于冒泡排序而言,自身存在的不足是不会将swap转换放到外面单独写一个函数,如果直接在原本的代码中写入转换排序可能导致主体代码过长,反而不容易进行思路的梳理。
冒泡排序中间存在两个循环,两个循环长度N(N-1),在时间复杂度上为o(N^2)。
选择排序
public static void selectionSort(int[] arr){
if(arr == null || arr.length<2){
return;
}
for(int i =0;i<arr.length-1;i++){
int minIndex = i;
for(int j = i+1;j<arr.length;j++){
minIndex = arr[j]<arr[minIndex]?j