算法day03 桶排序 数据结构分类 时间复杂度 异或运算

 学数据结构之前 必看_哔哩哔哩_bilibili

1.认识复杂度和简单排序算法_哔哩哔哩_bilibili

桶排序(Bucket sort)------时间复杂度为O(n)的排序方法(一)_多桶排序时间复杂度-CSDN博客

 桶排序

        测试场景:数组中有10000个随机数,范围在(0-100000)

        使用100个桶,每个桶存放的数据范围为:0-999, 1000-1999, 2000-2999,依次类推

public class BucketSort {

   
    public static void bucketSort(int[] data){
        //新建100个桶
        int bucketSize = 100;
        ArrayList<ArrayList<Integer>> buckets = new ArrayList<>(bucketSize);
        for (int i = 0; i < bucketSize; i++) {
            buckets.add(new ArrayList<>());  //0-99
        }
        //遍历数据,将数据放到桶中
        for (int i : data) {  //0-10000
            buckets.get(i / 1000).add(i);
        }
        //在桶内部进行排序
        int k = 0;
        for (int i = 0; i < bucketSize; i++) {
            ArrayList<Integer> list = buckets.get(i);
            Integer[] num = list.toArray(new Integer[1]);
            Arrays.sort(num);
            //拷贝到data中
            for (int n : num) {
                data[k++] = n;
            }
        }
    }

    public static void main(String[] args) {
        Random random = new Random();
        int[] data = new int[10000];
        for (int i = 0; i < data.length; i++) {
            data[i] = random.nextInt(100000);
        }
        BucketSort.bucketSort(data);
        System.out.println(Arrays.toString(data));
    }

}

  



数据结构分类

时间复杂度

        对于有n个元素的数组。

                选择排序:

                        循环一次进行n次比较,找出一个最小值。

                        再循环一次进行n-1次比较找出次小值。

                        。。。

                        这样的循环有n次,每轮循环进行n次,n-1次。。。1次比较

                        时间复杂度计算:

                               循环复杂度:n+n-1+n-2+...+1

                                比较复杂度:n+n-1+n-2+...+1

                                合计为一个等差数列  an^2+bn+C

                                用极限的思维,时间复杂度考虑最坏情况,只看最高项。时间复杂度为o(n^2)

                冒泡排序:

                        假设排序规则为升序

                        从左往右进行一次循环,相邻两个数进行比较交换位置。进行了n-1次比较。第一次循环肯定确定了最右边一个元素。

                        再循环一次进行n-2次确定次右边一个元素。

                        。。。

                        这样的循环有n次,每轮循环进行n-1次,n-2次。。。1次比较

                        时间复杂度计算:

                               循环复杂度:n-1+n-2+...+1

                                比较复杂度:n-1+n-2+...+1

                                合计为一个等差数列  an^2+bn+C

                                用极限的思维,时间复杂度考虑最坏情况,只看最高项。时间复杂度为o(n^2)

异或运算  无进位相加

        两数交换值

                      异或运算相比用直接相加的方式来说是没有用到第三个临时参数来储存值,并且位运算是直接操作内存地址,比加减乘除都要快。

                      前提条件是a,b不能是同一个内存地址,而不是说a,b值相等就不能进行位运算相加。因为a,b同内存的话,操作a或者b同时改变了两者的值都归零了。

                      int a,b;          

                      a = a^b

                      b = a^b

                      a = a^b

相关推荐

  1. 数据结构——时间复杂

    2024-07-12 01:54:03       49 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-12 01:54:03       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-12 01:54:03       71 阅读
  3. 在Django里面运行非项目文件

    2024-07-12 01:54:03       58 阅读
  4. Python语言-面向对象

    2024-07-12 01:54:03       69 阅读

热门阅读

  1. ES6 Iterator 与 for...of 循环(五)

    2024-07-12 01:54:03       23 阅读
  2. 对素数的一种新理解

    2024-07-12 01:54:03       21 阅读
  3. 力扣 454四数相加

    2024-07-12 01:54:03       20 阅读
  4. 十大排序算法(慢慢更新)

    2024-07-12 01:54:03       22 阅读
  5. 简谈设计模式之建造者模式

    2024-07-12 01:54:03       18 阅读
  6. 力扣题解(乘积最大子数组)

    2024-07-12 01:54:03       23 阅读
  7. synchronized (userAccount.intern())知识点

    2024-07-12 01:54:03       23 阅读
  8. 网络协议与标准

    2024-07-12 01:54:03       24 阅读
  9. Haproxy搭建Web群集

    2024-07-12 01:54:03       23 阅读
  10. 24.6.30

    24.6.30

    2024-07-12 01:54:03      18 阅读
  11. 裸金属服务器适用于哪些场景?

    2024-07-12 01:54:03       19 阅读
  12. 如何理解李彦宏说的“不要卷模型,要卷应用”

    2024-07-12 01:54:03       22 阅读