时间复杂度的简介
算法的时间复杂度是一个函数,描述了算法的执行时间。通常使用大O符号来表示。
在进行算法分析时,语句总的执行次数T(n)是关于问题规模n的函数,进而分析T(n)随n的变
情况来确定T(n)的数量级。
一般情况下,算法中基本操作重复执行的次数是问题规模n的某个函数,O(f(n))
分析:随着n的增长,算法执行的时间的增长率和 f(n) 的增长率成正比,
所以 f(n) 越小,算法的时间复杂度越低,算法的效率越高。
常见的时间复杂度分析
有几重for循环,只有一重则时间复杂度为O(n),二重则为O(n^2)依此类推
如果有二分则为O(logn),二分例如二分查找,如果一个for循环套一个二分,
那么时间复杂度则为O(nlogn)
常见的时间复杂度
常数阶O(1),对数阶O( ),线性阶O(n),
线性对数阶O(nlog2n),平方阶O(n^2),立方阶O(n^3),...,
k次方阶O(n^k),指数阶O(2^n)
随着问题规模n的不断增大,上述时间复杂度不断增大,算法的执行效率越低。
快速排序
快速排序的分析
快速排序的流程
快速排序的代码实现
public static void main(String[] args) {
//1.定义要排序的数组
int[] arr = {5,2,6,8,4,3,7};
//2.定义变量low保存数组中第一个元素的索引
int low = 0;
//3.定义变量high保存数组中最后一个元素的索引
int high = arr.length - 1;
System.out.println("排序前的元素:" + Arrays.toString(arr));
quickSort(arr, low, high);
System.out.println("排序后的元素:" + Arrays.toString(arr));
}
public static void quickSort(int[] arr,int low,int high){
//1.定义变量来保存数组第一个元素在数组拍完序后的位置
int position;
if(low < high){
position = findPosition(arr,low,high);
//2.对小于数组中第一个数的部分进行快速排序
quickSort(arr, low, position - 1);
//3.对大于数组中第一个数的部分进行快速排序
quickSort(arr, position + 1, high);
}
}
//查找第一个元素在要排序的数中的位置
//当low=high的时候,low和high的值就是第一个元素排序完在数组中的值
public static int findPosition(int[] arr,int low,int high){
//1.定义变量temp保存数组的第一个元素
int temp = arr[low];
while(low < high){
//2.high索引对应的元素比temp大,--high
while(low < high && arr[high] >= temp){
--high;
}
//3.循环结束,high索引对应的值小于第一个元素,将high索引对应的值赋值给low索引对应的值
arr[low] = arr[high];
//4.low索引对应的元素比temp小,++low
while(low < high && arr[low] <= temp){
++low;
}
//5.循环结束,low索引对应的值大于第一个元素,将low索引对应的值赋值给high索引对应的值
arr[high] = arr[low];
}
//6.将数组第一个元素放置在数组排序完的位置上
arr[low] = temp;
//7.最外层循环接收,low=high,第一个元素在拍完序中的位置就是low和hight的值
return low;
}
快速排序的时间复杂度为O(nlogn)
冒泡排序和选择排序的时间复杂度为O(n^2)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。