数据结构与算法——冒泡和选择排序

版权声明:转载请注明出处 https://blog.csdn.net/menwaiqingshan/article/details/86554951

数据结构研究数据之间的关系

逻辑结构

1.集合结构
2.线性结构
3.图形结构
4.树形结构

存储结构

1.表
2.堆栈
3.队列
4.数组
5.树
6.二叉树
7.图

算法

一个算法的优劣程度可以用空间复杂度和时间复杂度来衡量。

空间复杂度:是一个算法在运行过程中临时占用存储空间大小的度量

时间复杂度:是一个算法在运行过程中所需要计算的工作量

时间复杂度是将输入值趋近无穷的情况
比如:

 public void function1() {
    
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            // dosomething;
        }
    }

    for (int i = 0; i < n; i++) {
        //dosomething   
    }

    // dosomething
}

该程序计次 n²+n+1
n取无穷大,时间复杂度o(n)=n²

数据结构

互相存在一种或多种特定关系的数据元素的集合

程序

程序 = 数据结构 + 算法
程序好坏 = 时间复杂度 + 空间复杂度 + 实际应用场景 + 可读性

顺序存储

优点:尾插效率高,支持随机访问
缺点:中间插入和删除效率低
数组、Arraylist

两数交换

int t = a;
a = b;
b = t;

//加减法
a=a+b;
b=a-b;
a=a-b;

//性能最优,但无可读性
a = a ^ b;
b = a ^ b;
a = a ^ b;

位运算
异或不同为1,相同为0

蛮力法(穷举法、枚举法)

数据量小,效率是最高
数据量大,非常慢

冒泡排序

冒泡排序

//比较数值,交换
public void bubbleSort1(int[] array) {
    int temp;
    for (int i = 0; i < array.length; i++) {
        for (int j = 0; j < array.length-i-1; j++) {
            if (array[j] > array[j + 1]) {
                temp = array[j];
                array[j] = array[j + 1];
                array[j + 1] = temp;
            }
        }
    }
}


第一层 内部循环n
第二层 n-1
第三层 n-2
第三层 n-3
所以时间复杂度   n+(n-1)+(n-1)...+1=n*1+n*(n-1)/2=n*(n+1)/2

–>优化

//添加flag,一旦某次循环中没有出现任何的交换说明数组已经有序
public void bubbleSort(int[] array) {
    for (int i = 0; i < array.length; i++) {
        boolean flag = true;
        for (int j = 0; j < array.length - 1 - i; j++) {
            if (array[j] > array[j + 1]) {
                int temp = array[j];
                array[j] = array[j + 1];
                array[j + 1] = temp;
                flag = false;
            }

        }

        if (flag) {
            break;
        }
    }
}

选择排序

//查找出最小值,交换

public void selectSort(int[] array) {

    for (int i = 0; i < array.length - 1; i++) {
        int index = i;
        for (int j = i + 1; j < array.length; j++) {
            if (array[j] < array[index]) {
                index = j;
            }
        }

        if (i != index) {
            int temp = array[index];
            array[index] = array[i];
            array[i] = temp;
        }
    }
}

猜你喜欢

转载自blog.csdn.net/menwaiqingshan/article/details/86554951