2022.1.6 时间复杂度及简单排序算法
-
定义:在常数操作数量的表达式中,除去低阶项和高阶项的系数所剩下来的东西,记作O(剩下),读作 big O(剩下),时间复杂度按照算法执行的最差情况估计;
-
评价一个算法流程的好坏,先看时间复杂度的指标,然后再分析不同数据样本下的* 实际运行时间 *,也就是”常数运行时间“。
2. 简单排序算法
(1)选择排序
-
从数组下标为零的位置(比较的数)开始,依次与后面n-1个数(被比较的数)进行比较,找到最小的数并放在比较的数。
-
代码:
?
public class selectionSoft {
public static void main(String[] args)
{
int[] arr = {4,6,2,9,4,8,6,4,5,7,1};
SelectionSoft(arr);
}
public static void SelectionSoft(int[] arr)
{
for(int i=0;i<arr.length;i++)
{
for(int j=i+1;j<arr.length;j++)
{
if(arr[j]<arr[i])
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
for(int i:arr)
{
System.out.print(i+" ");
}
}
}
?
?
-
运行结果:
4. 二分详解
(1)二分查找 O(logn)(在有序数组里查找某个数是否存在)
public static void BinarySoft(int[] arr,int x)
{
int min = 0,max = arr.length;
while(min<max)
{
int mid = (min+max)/2;
if(x==arr[mid])
{
System.out.println(mid);
return;
}
?
else if(x<arr[mid])
{
max = mid;
}
else
{
min = mid;
}
}
}(2) 在一个有序数组中,找>=某个数最左侧的位置
public static void main(String[] args)
{
int[] arr = {2,4,4,4,6,7,7,8,8,9,9};
BinarySoft(arr,4);
}public static void BinarySoft(int[] arr,int x)
{
int min = 0,max = arr.length;
int flag = 0;
while(min{
int mid = (min+max)/2;
if(x==arr[mid])
{
flag = mid;
if(arr[flag-1]break;
else
max = mid;
}else if(x
{
max = mid;
}
else
{
min = mid;
}
}
System.out.print(flag-1);
}(3) 局部最小值问题