美文网首页
常见排序算法

常见排序算法

作者: fengyongge | 来源:发表于2020-07-21 16:44 被阅读0次

时间复杂度和空间复杂度

  • O(1) 常数

  • O(n) 线性

  • O(n^2) 平方

  • O(n^3)立方

  • O(n!)阶乘

  • O(logn) 对数

  • O(nlogn)

  • O(2^) 指数

  • 时间复杂度顺序从小到大的顺序O(1)<O(log n) < O(n )< O(nlogn) < O(n^2) <O(n^3) < O(2^n) <O(n!) < O(n^n)

对比.png

排序分类以及时间复杂度

类型 排序方法 时间复杂度-平均情况 时间复杂度-最好情况 时间复杂度-最坏情况 空间复杂度 稳定性
插入排序 直接插入 O(n^2) O(N) O(n^2) O(1) 稳定
插入排序 shell(希尔)排序 O(n^2) O(N) O(n^2) O(1) 不稳定
选择排序 直接选择 O(n^2) O(n^2) O(n^2) O(1) 不稳定
选择排序 堆排序 O(nlogn) O(nlogn) O(nlogn) O(1) 不稳定
交换排序 冒泡排序 O(n^2) O(N) O(n^2) O(1) 稳定
交换排序 快速排序 O(nlogn) O(nlogn) O(n^2) O(nlogn) 不稳定
归并排序 快速排序 O(nlogn) O(nlogn) O(nlogn) O(1) 稳定

快速排序(挖坑埋数 + 分治法)

blog参考

  • 初始化 i= i, j =r,x = a[i],取数组第一个数作为基准数

  • j--,找出小与基准数的数据,挖出来,放到默认的第一个坑中;

  • i++找出大于等于基准数的值,放到刚才的坑中;

  • 重复2,3操作,当i==j中的话,把基准数放入其中

  • 求出第一个基准数后,然后递归基准数的左边,基准数的右边

   void quick_sort(int s[], int l, int r)
    {
        if (l < r)
        {
            int i = l, j = r, x = s[l];
            while (i < j)
            {
                while(i < j && s[j] >= x) {// 从右向左找第一个小于x的数
                    j--;
                }
                if(i < j) {
                    s[i++] = s[j];
                }

                while(i < j && s[i] < x) {// 从左向右找第一个大于等于x的数
                    i++;
                }
                if(i < j) {
                    s[j--] = s[i];
                }
            }
            s[i] = x;
            quick_sort(s, l, i - 1); // 递归调用 
            quick_sort(s, i + 1, r);
        }
    }

冒泡排序


 void bubbleSort(int arr[]){

       if(arr==null || arr.length < 2 ){
           return;
       }

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

   }

三色旗问题

blog参考

相关文章

  • 数据结构与算法

    常见排序算法 堆排序 算法大全 算法大汇总

  • LeetCode大全

    1.常见排序算法: 常见的排序算法:冒泡排序、选择排序、插入排序、归并排序、快速排序、希尔排序、堆排序、计数排序、...

  • 排序算法

    常见的排序算法 常见的排序算法有:插入、希尔、选择、冒泡、归并、快速、堆排序。。。 插入排序 算法步骤一、从数组的...

  • Python知识点:常见算法的python实现

    提到排序算法,常见的有如下几种:冒泡排序、选择排序、插入排序、快速排序、堆排序、归并排序、希尔排序;查找算法最常见...

  • 排序算法(四) 希尔排序(插入排序的进化)

    参考Java排序算法(四):希尔排序常见排序算法 - 希尔排序 (Shell Sort) 希尔排序算法是按其设计者...

  • Rust数据结构——排序算法(一)

    Rust数据结构——排序算法(一) 0x01 常见的排序算法 排序算法是数据结构中很常见的算法。如果你了解过数据结...

  • IOS常见算法

    常见算法: 快速排序: 选择排序: 冒泡排序: 测试代码:

  • 常见排序算法

    整理常见排序算法。

  • 开发者应该掌握的几种排序算法

    该篇文章主要介绍了算法基础以及几种常见的排序算法:选择排序、插入排序、冒泡排序、快速排序、堆排序。 一、算法基础 ...

  • 排序算法

    排序算法 排序是最基本的算法之一,常见的排序算法有插入排序、希尔排序、选择排序、冒泡排序、堆排序、归并排序及快速排...

网友评论

      本文标题:常见排序算法

      本文链接:https://www.haomeiwen.com/subject/twxxkctx.html