算法和数据结构体系班 01.认识复杂度、对数器、二分法

简介: 算法和数据结构体系班 01.认识复杂度、对数器、二分法

01.认识复杂度、对数器、二分法


常数时间操作(和数据量有关的操作)

不是常数时间的操作(和数据量无关)


选择排序:

在0-n-1个数中遍历,当找到最小的一个数,把它放到第0位

在1-n-1个数中遍历,当找到最小的一个数,把它放到第1位

在2-n-1个数中遍历,当找到最小的一个数,把它放到第2位。


public class code01_SelectionSort {
    public static void selectionSort(int [] arr){
        if(arr==null || arr.length<2){
            return ;
        }
        for(int i=0;i<arr.length;i++){
            int minIndex=i;
            for(int j=i+1;j<arr.length;j++){
                minIndex=arr[j]<arr[minIndex]?j:minIndex;
            }
            swap(arr,i,minIndex);
        }
    }
    public static void swap(int [] arr,int i,int j){
        int temp=arr[i];
        arr[i]=arr[j];
        arr[j]=temp;
    }
    public static void main(String[] args) {
        int []arr={3,5,8,45,1,2};
        selectionSort(arr);
        for (int item:
             arr) {
            System.out.println(item);
        }
    }
}

冒泡排序

比较相邻的两个数,把比较大的一个数往后排,这样排完一次过后最大的数就变成了最右边。


public class Code02_BubbleSort {
    public static void BubbleSort(int [] arr){
        if(arr==null || arr.length<2){
            return ;
        }
        for(int i=arr.length-1;i>0;i--){//循环N-1次就可以完成排序
            for(int j=0;j<i;j++){//放置数组越界
                if(arr[j]>arr[j+1]){
                    swap(arr,j,j+1);
                }
            }
        }
    }
    public static void swap(int [] arr,int m,int q){
        int temp=arr[m];
        arr[m]=arr[q];
        arr[q]=temp;
    }
    public static void main(String[] args) {
        int []arr={3,5,8,45,1,100,2,1,10};
        BubbleSort(arr);
        for (int item:
                arr) {
            System.out.println(item);
        }
    }
}

插入排序 时间复杂度(o(n2)在数据流程最差的时候来表示这个数据)


首先保证下标0位置上有序,然后保证0,1位置上有序,如果后边的比前边的小,就让它前移。

直到保证在0到n上有序。


public class Code03_InsertionSort {
    public static void insertionSort(int []arr){
        if(arr==null ||arr.length<2){
            return ;
        }
        for(int i=1;i<arr.length;i++){
            for(int j=i-1;j>=0&&arr[j]>arr[j+1];j--){
                swap(arr,j,j+1);
            }
        }
    }
    public static void swap(int []arr,int i,int j){
        arr[i]=arr[i]^arr[j];
        arr[j]=arr[i]^arr[j];
        arr[i]=arr[i]^arr[j];
    }
    public static void main(String[] args) {
        int arr[]={3,4,2,1,78,7,15};
        insertionSort(arr);
        for (int i:
           arr  ) {
            System.out.println(i);
        }
    }
}

认识对数器


通过自己编写的随机测试用例来测试程序。

相关文章
|
1月前
|
存储 人工智能 算法
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
这篇文章详细介绍了Dijkstra和Floyd算法,这两种算法分别用于解决单源和多源最短路径问题,并且提供了Java语言的实现代码。
74 3
数据结构与算法细节篇之最短路径问题:Dijkstra和Floyd算法详细描述,java语言实现。
|
1月前
|
存储 算法 Java
Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性
Java Set因其“无重复”特性在集合框架中独树一帜。本文解析了Set接口及其主要实现类(如HashSet、TreeSet)如何通过特定数据结构和算法确保元素唯一性,并提供了最佳实践建议,包括选择合适的Set实现类和正确实现自定义对象的hashCode()与equals()方法。
35 4
|
1月前
|
搜索推荐 算法
数据结构与算法学习十四:常用排序算法总结和对比
关于常用排序算法的总结和对比,包括稳定性、内排序、外排序、时间复杂度和空间复杂度等术语的解释。
21 0
数据结构与算法学习十四:常用排序算法总结和对比
|
1月前
|
移动开发 算法 前端开发
前端常用算法全解:特征梳理、复杂度比较、分类解读与示例展示
前端常用算法全解:特征梳理、复杂度比较、分类解读与示例展示
24 0
|
1月前
|
算法
数据结构(复杂度)
数据结构(复杂度)
21 0
|
1月前
|
机器学习/深度学习 搜索推荐 算法
探索数据结构:初入算法之经典排序算法
探索数据结构:初入算法之经典排序算法
|
1月前
|
存储 机器学习/深度学习 算法
探索数据结构:入门及复杂度的解锁
探索数据结构:入门及复杂度的解锁
|
1月前
|
算法 Java 索引
数据结构与算法学习十五:常用查找算法介绍,线性排序、二分查找(折半查找)算法、差值查找算法、斐波那契(黄金分割法)查找算法
四种常用的查找算法:顺序查找、二分查找(折半查找)、插值查找和斐波那契查找,并提供了Java语言的实现代码和测试结果。
22 0
|
22天前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
109 9
|
13天前
|
存储 算法
非递归实现后序遍历时,如何避免栈溢出?
后序遍历的递归实现和非递归实现各有优缺点,在实际应用中需要根据具体的问题需求、二叉树的特点以及性能和空间的限制等因素来选择合适的实现方式。
21 1
下一篇
无影云桌面