学排序看这一篇就够了

排序算法深度好文(图解 + 代码解析 + 误区 Q&A )——学排序看这一篇就够了!!! 排序算法深度好文(图解 + 代码解析 + 误区 Q&A )——学排序看这一篇就够了!!!(1) 冒泡排序(2) 选择排序a. 简单选择排序b. 堆排序(3) 插入排序a. 直接插入排序b. 希尔排序(4) 快速排序无优化的快速排序优化一随机化快速排序优化二中位数三分法(5) 归并排序(6) 基数排序外部归并排序、置换选择排序、多路归并等 这里不做涉及 阅读详情

排序

排序概念

  • 稳定性:两个相等的数据,经过排序后,如果相对位置没有变化则为稳定排序,反之,为不稳定排序。
  • 内部排序与外部排序:如果一次性可以将所有数据加载到内存中进行排序则为内部排序;反之,为外部排序

1.插入排序

1.1 直接插入排序
  • 整个区间被分为:有序区间与无序区间;

  • 原理:每次选择无序区间的第一个元素,在有序区间内选择合适的位置插入。[默认要排序的数据第一个元素是有序的]

  • 应用场景:如果搬移元素个数比较少,就比较适合插入排序,序列接近有序或者数据较少时

  • 稳定性:稳定

  • 时间复杂度:O(n^2)

    • 最优:O(n) -> 有序时
    • 最差:O(n^2) -> 逆序
  • 空间复杂度:O(1)

  • 代码实现:

    public static void insertSort(int[] array){
    	
        for(int i = 1; i < array.length;i++){
            //有序区间[0,i)
            //无序区间[i,array.length)
            int num = array[i]; //无序区间第一个数
            int end = i-1; //比较的元素位置
            
            while(end >= 0 && num < array[end]){ //当数组不越界同时当前数比相比较的数小的时候
                array[end+1] = array[end]; //移位
                end--;
            }
            
            //插入元素
            array[end+1] = num;
            
        }
    }
    
1.2 希尔排序
  • 原理:采用分组的方式,将序列变成:接近有序,将数据变少;[采用直接插入排序对分组后的数据排序]

  • 应用场景:元素比较凌乱,个数比较多

  • 稳定性:不稳定

  • 时间复杂度:O(n^2)

  • 空间复杂度:O(n)

  • 代码实现:

    public static void shellSort(int[] array){
    	int gap = array.length;
        while(gap > 1){
            gap = gap/3+1; //分组数
            for(int i = gap;i < array.length;i++){
                
                int num = array[i]; //分组后当前组中无序的第一个元素
                int end = i - gap;
                
                while(end >= 0 && num < array[end]){
                    array[end+gap] = array[end];
                    end -= gap;
                }
                
                array[end+gap] = num;
            }
        }
    }
    

2.选择排序

2.1 直接选择排序
  • 原理:每次从无序区间选出最大(或最小)的一个元素,存放在无序区间的最后;直到全部元素排完[n个元素排n-1次]

  • 稳定性:不稳定

  • 时间复杂度:O(n^2)

  • 空间复杂度:O(1)

  • 代码实现:

    public static void selectSort(int[] array){
    	for(int i = 0;i < array.length-1;i++){
            
            //无序区间:[0,array.length-i)
            //有序区间:[arrar.length-i,array.length)
            int max = 0;
            for(int j = 1; j < array.length-i;j++){
                if(array[j] > array[max]){
                    max = j;
                }
            }
            
            int temp = array[max];
            array[max] = array[array.length-1-i];
            array[array.length-1-i] = temp;
        }
    }
    
    
    //双向选择排序
     public static void selectSortPlus(int[] array){
            int begin = 0;
            int end = array.length-1;
    
            while(begin < end){
                int min = begin;
                int max = begin;
    
                for (int i = begin+1; i <= end; i++) {
                    if(array[i] < array[min]){
                        min = i;
                    }
                    if(array[i] > array[max]){
                        max = i;
                    }
                }
    
                swap(array,min,begin);
    
                if(max == begin){
                    max = min;
                }
    
                swap(array,max,end);
                begin++;
                end--;
            }
    
        }
    
2.2 堆排序
  • 原理:利用堆这种数据结构;首先建堆,利用堆删除的思想来进行排序(用堆顶元素与堆中最后一个元素进行交换,将堆中元素减少一个,再将堆顶元素向下调整)

  • 稳定性:不稳定

  • 时间复杂度:O(n*log(n))

  • 空间复杂度:O(1)

    public satic void headSort(int[] array,int size){  //array排序数组,size数组长度
        creatHeap(array,size);
        
        for(int i = size-1;i >= 0;i--){
            swap(array,i,0); //将最大的节点与最后一个节点交换,以确保排序数组
           	shiftDown(array,i,0);//默认斩掉最后一个节点
        }
    }
    
    
    //构建堆
    private static void createHeap(int[] array,int size){
        int parent = (size-2)/2;
        
        for(int i = parent;i >= 0;i--){
            shiftDown(array,size,i);
        }
    }
    
    //向下调整
    public static void shiftDown(int[] array,int size,int index){
        int left = 2*index + 1;
        
        while(left < size){
            int max = left;
            int right = left + 1;
            if(right < size){
                if(array[right] > array[left]){
                    max = right;
                }
            }
            
            if(array[index] >= array[max]){
                break;
            }
            
            int temp = array[index];
            array[index] = array[max];
            array[max] = temp;
            
            index = max;
            left = 2*max+1;
        }
    }
    

3.冒泡排序

  • 原理:在无序区间,通过相邻数的比较,将最大的数冒泡到无序区间的最后,持续这个过程,直到数组整体有序

  • 稳定性:稳定

  • 时间复杂度:O(n^2)

  • 空间复杂度:O(1)

    public static void bubbleSort(int[] arr){
        for(int i = 0;i < arr.length-1;i++){
            boolean isSorted = true;
            for(int j = 0;i < arr.length-1-i;j++){
                if(array[j] > arr[j+1]){
                    swap(array,j,j+1); //交换
                    isSorted = false; 
                }
            }
            if(isSorted){ //如果没有交换则已排序完成
                break;
            }
        }
    }
    

4.快速排序

  • 原理:默认升序

    1. 从区间中取出一个数据作为基准值,按照该基准值将区间分割左右两个部分
    2. 按照快排思想排序左半部分
    3. 按照快排思想排序右半部分
  • 应用场景:数据量大比较随机(数据杂乱)

  • 稳定性:不稳定

  • 时间复杂度:O(n*logn)

  • 空间复杂度:O(logn)

    //交换法
    //quickSort(array,0,array.length);[begin,end)
    public static void quickSort(int[] array,int begin,int end){
        if(end - begin > 1){
            int left = begin;
            int right = end-1;
            int baseNum = array[right];
            
            while(left < right){
                while(left < right && array[left] <= baseNum){
                    left++;
                }
                
                while(left < right && array[right] >= baseNum){
                    right--;
                }
                
                if(left < right){
                    swap(array,left,right);
                }
            }
            
            swap(array,end,left);
            
            quickSort(array,begin,left);
            quickSort(array,left+1,end);
        }
    }
    
    //挖坑法
    //quickSort(array,0,array.length-1);[begin,end]
     public static void quickSort(int[] array,int begin,int end){
            if(begin < end){
                int baseNum = array[begin]; //基数
                int left = begin;
                int right = end;
    
                while(left < right){
                    while(left < end && array[right] >= baseNum){
                        right--;
                    }
    
                    if(left < end){
                        array[left] = array[right];
                    }
    
                    while(left < end && array[left] =< baseNum){
                        left++;
                    }
    
                    if(left < end){
                        array[right] = array[left];
                    }
                }
    
                array[left] = baseNum;
                quickSort(array,begin,left-1);
                quickSort(array,left+1,end);
            }
        }
    
     //[ left , right):找到比基数小的给前面移动
        public static void quickSort(int[] array,int left,int right){
            if(right - left > 1){
                int cur = left;
                int prev = cur - 1;
                int key = array[right-1];
    
                while(cur < right){
                    if(key > array[cur] && ++prev != cur){  //++prev != cur是因为中间没有比基数大的了不用移动,自排序
                        swap(array,prev,cur);
                    }
                    ++cur;
                }
    
                if(++prev != right-1){
                    swap(array,prev,right-1);
                }
    
                quickSort(array,left,prev);
                quickSort(array,prev+1,right);
            }
        }
    

非递归实现:

​

    public static void quick(int[] array){
        Stack<Integer> stack = new Stack<Integer>();

        stack.push(array.length);
        stack.push(0);

        while(!stack.isEmpty()){
            int left = stack.pop();
            int right = stack.pop();

            if(right - left > 1){
                int div = quickSort(array, left, right);
                stack.push(right);
                stack.push(div+1);
                stack.push(div);
                stack.push(left);
            }
        }
    }

    public static int quickSort(int[] array,int left,int right){
            int cur = left;
            int prev = cur - 1;
            int key = array[right-1];

            while(cur < right){
                if(key > array[cur] && ++prev != cur){  //++prev != cur是因为中间没有比基数大的了不用移动,自排序
                    swap(array,prev,cur);
                }
                ++cur;
            }

            if(++prev != right-1){
                swap(array,prev,right-1);
            }

            return prev;
    }

5.归并排序

  • 原理:将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使

    子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并

  • 稳定性:稳定

  • 时间复杂度:O(NlogN)

  • 空间复杂度:O(n)

//合并两个有序数组
private static void merget(int[] array,int left,int mid,int right,int[] temp){
        int index1 = left;
        int index2 = mid+1;
        int index = 0;
        while(index1 <= mid && index2 <= right){
            if(array[index1] <= array[index2]){
                temp[index++] = array[index1++];
            }else{
                temp[index++] = array[index2++];
            }
        }

        while(index1 <= mid){
            temp[index++] = array[index1++];
        }

        while(index2 <= right){
            temp[index++] = array[index2++];
        }

//        index = 0;
//        while(left <= right){
//            array[left++]=temp[index++];
//        }
        System.arraycopy(temp,0,array,left,right-left+1);
    }
//递归实现归并排序[left,right]
 private static void mergeSort(int[] arr, int left, int right, int[] temp) {
        if(left < right){
            int mid = (left+right)/2;

            //向左递归
            mergeSort(arr,left,mid,temp);
            //向右递归
            mergeSort(arr,mid+1,right,temp);
            //合并
            merge(arr,left,mid,right,temp);
        }
    }
//非递归 实现归并排序
public static void mergetSort(int[] array){
        int gap = 1;
        int[] temp = new int[array.length];
        while (gap < array.length){
            for(int i= 0;i < array.length;i+=gap*2){
                int mid = i+gap;
                int right = mid+gap;

                if(mid >= array.length){
                    mid = array.length-1;
                }

                if(right >= array.length){
                    right = array.length-1;
                }

                merget(array,i,mid,right,temp);
            }
            gap*=2;
        }
    }

总结

排序方法最好平均最坏空间复杂度稳定性
冒泡排序O(n)O(n^2)O(n^2)O(1)稳定
插入排序O(n)O(n^2)O(n^2)O(1)稳定
选择排序O(n^2)O(n^2)O(n^2)O(1)不稳定
希尔排序O(n)O(n^1.3)O(n^2)O(1)不稳定
堆排序O(n*logn)O(n*logn)O(n*logn)O(1)不稳定
快速排序O(n*logn)O(n*logn)O(n^2)O(logn)~O(n)不稳定
归并排序O(n*logn)O(n*logn)O(n*logn)O(1)稳定
计数排序c++详解(看这一篇就够了) 计数排序通过统计每个元素出现的次数来实现排序,然后根据这些统计结果重建排序后的数组。它是一种稳定的排序算法。当你在处理一个数组时,可能有重复的数字。例如数组[2, 2]。在这种情况下,你希望这两个2保持它们在原数组中的相对顺序。为了保证这一点,在重建排序数组时,从数组的最后一个元素开始放置元素,以避免覆盖已经排序的元素。所以当我们说“最后位置是索引1”,意味着数字1应该放置在排序后的数组的索引1的位置,并且在将所有元素放到新数组时,我们会按照这个逻辑逐步填充整个数组。 阅读详情

相关推荐

linux 内核vxlan收发包流程

1.vxlan口收包处理流程 前面几章详细介绍了vxlan接口的使用,而且已经知道vxlan是 MAC IN UDP中的封装,因此,在解封装之前,一切按照原有流程走,在此复习一下内核收发包流程(驱动层的数据处理这次不再解析,直接从__netif_receive_skb_core开始) #物理网卡处理中断,触发softirq i40e_intr └─napi_schedule_irqoff #i40e softirq把包放到per cpu backlog,触发softirq i40e_napi_p

魏言华的博客 3825

算法笔记——左神初级(3)排序稳定性、桶排序

排序的稳定性 即在排序过程中,相同的值,它们的相对位置是否会被打乱。 例如: 具有排序稳定性:冒泡排序、插入排序、归并排序 不具有排序稳定性:选择排序、快速排序、堆排序 排序稳定性的价值:可以保留原始排序中的有用信息,例如几个人先按身高排序,然后再按年龄排序,第二次排完序后同年龄的人也是按身高排序的。 工程中的综合排序方法 如果数据很长: 1.首先做判断,如果数据都是int、long、char、f...

现实 理想青年的博客 581

射频工程师笔记---射频通信基础

回顾一下移动通信技术的发展,其实是互联网和通信技术的融合过程。在这个过程中,很多应用都在不断加入其中。比如计算机跟通信的融合产生了互联网、互联网跟手机的融合带来了移动互联网。手机可以看杂志、看视频、听音乐,于是又出现了内容服务产业;再后来,电视音箱等设备也能联网,于是网络跟家电又产生了融合。所以应用的出现总是在融合其他产业。在1995年,比尔·盖茨在《未来之路》一书中首次提出:在未来...

多年硬件从业经历,热爱学习,记录生活! 2万+

十大经典排序算法——不能再详细了

影响排序性能的要素: 时间性能; 辅助空间 算法的复杂度 简单排序【n^2】 算法思想: 第一趟: 从第一个记录开始,通过n-1次关键字比较,从n个记录中选出最小的并和第一个记录交换; 第二趟: 从第二个记录开始,通过n-2次关键字比较,从n -1个记录中选出最小的并和第二个记录交换; 复杂度稳稳的是0(n2),几乎被抛弃 void SimpleSort() { ...

weixin_42637495的博客 1046

CMake接口库实战:如何用add_library的INTERFACE选项管理跨项目依赖

本文深入探讨了CMake中add_library的INTERFACE选项在管理跨项目依赖时的实战应用。通过创建不包含源代码的接口库,开发者可以集中管理头文件路径、编译定义、链接库等公共配置,并将其声明式地传递给依赖目标。文章以构建模块化跨平台网络应用为例,详细展示了如何利用接口库实现配置的集中化、依赖关系的显式化,从而提升大型项目的可维护性和可移植性。

water的专栏 1039

饥荒联机版Mod开发——modmain环境与API深度解析

本文深入解析饥荒联机版Mod开发中的modmain.lua环境与核心API,详细讲解环境表构建原理、API注册与调用时机,并提供高级开发技巧与最佳实践。通过源码分析和实际案例,帮助开发者掌握Mod开发核心技术,解决常见问题,提升开发效率与代码质量。

weixin_30312563的博客 432

左神算法基础class1——例子3、4、5冒泡,选择、插入排序

左神算法基础class1——例子3、4、5冒泡,选择、插入排序冒泡排序题目:冒泡排序细节的讲解与复杂度分析分析完整代码选择排序题目:选择排序细节的讲解与复杂度分析分析完整代码插入排序(很有用)题目:插入排序细节的讲解与复杂度分析分析完整代码 冒泡排序 题目:冒泡排序细节的讲解与复杂度分析 时间复杂度O(N^2),额外空间复杂度O(1) 分析 外侧for循环for(int i = 0;i < ...

shi_xiao_xuan的博客 404

全面认识PFC和LLC

想象一下,你在拉一辆车,如果你的力气都用在推动车子前进的方向上,这样拉车会比较轻松。而如果你的力气用在不正确的方向,比如侧向、斜向,那就需要更大的力气才能推动车子。PFC就是在帮助电流“朝着正确的方向”流动,这样可以用更少的能量做更多的事情,减少无用的功率损耗。PFC负责将电流方向对齐,让电源效率更高,而LLC负责电压的高效转换,两者配合可以在更宽的负载范围内保持高效率。综上所述,PFC LLC电路是一种高效的电源转换电路,通过PFC模块和LLC模块的组合,实现了从交流电到直流电的高效转换。

weixin_43199439的博客 6091

MySQL ORDER BY排序一篇就够了

工作中常常会使用ORDER BY进行排序,了解ORDER BY多种排序方式是非常有必要的。

做一个有思想的技术人 9199

YOLO26改进105:全网首发--使用BiFPN改进特征金字塔网络

YOLOv6 v3.0在目标检测领域实现重大突破,通过改进网络架构和训练方案显著提升性能。该版本在COCO数据集上展现出优越表现:YOLOv6-N达到37.5% AP/1187 FPS,YOLOv6-S实现45.0% AP/484 FPS,均超越同类检测器。大模型YOLOv6-M/L分别达到50.0%/52.8% AP,L6版本更创下实时检测新纪录。关键技术包括RepVGGBlock、BiFusion等新型模块,通过多分支融合和高效重参数化设计提升性能。研究团队已验证各改进模块有效性,代码已开源。

AIcurator的博客 95

yandex 不定长旋转验证码PPOCR识别案例

可以看到,此种验证码非常变态,旋转角度不固定,干扰背景不固定,字符长度不固定,弯曲形变都是不固定的,在人眼都很难分辨验证码的情况下,其实都是对于模型来讲,也是比较困难的哈哈,传统验证码可能小几百张就能达到很好的效果了,是因为,验证码难度比较简单,通常都是4,6位定长,但是对于模型而言,无非就是增加数据量。由于该验证码的复杂度,自己写一个rcnn或者其他模型,来优化改数据集进行训练变的尤为困难复杂,所以这里强烈推荐百度飞桨的开源模型。在得到较好的loss后,导出模型。如有侵犯,请联系作者下架。

码王吴彦祖的博客 723

C++ 中的sort()排序函数原理、用法看这一篇就够了

C++ 中的sort排序函数用法 sort(first_pointer,first_pointer+n,cmp) 该函数可以给数组,或者链表list、向量排序。 原理:sort并不是简单的快速排序,它对快速排序进行了优化。此外,它还结合了插入排序和推排序。系统会根据数据形式和数据量自动选择合适的排序方法。它每次排序中不只选择一种方法,比如给一个数据量较大的数组排序,开始采用快速排序,分段递归,分段之后每一段的数据量达到一个较小值后它就不继续往下递归,而是选择插入排序,如果递归的太深,他会选择推排序。 3个参

u014339447的博客 8万+

【OpenClaw从入门到精通】第34篇:医疗AI的“Agent OS”时代:基于WiseClaw构建医院专属智能体平台(2026实测版)

2026年医疗AI迈入实战落地新阶段,全球首个医疗OpenClaw平台WiseClaw正式发布,香港中文大学(深圳)医院完成业内首个私有化部署。本文基于真实医疗场景需求与公开技术资料,系统拆解医疗智能体平台的建设逻辑:从医疗Agent OS的五大核心特性切入,详解门诊病历质控、用药审查、医院运行管理三大临床场景的智能体搭建流程,提供完整的私有化部署代码、安全配置方案与实操演示。文章兼顾新手入门与进阶需求,严格遵循医疗合规要求,强调“只读不写+人工复核”原则,所有方案均经过虚拟实测验证。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 786

关于排序算法,看这一篇就够了!这篇看不懂麻烦找我拿红包

排序算法是《数据结构与算法》中最基本的算法之一。 排序算法可以分为内部排序和外部排序。 内部排序是数据记录在内存中进行排序。 而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。 用一张图概括: 时间复杂度与空间复杂度 关于时间复杂度: 平方阶 (O(n2)) 排序 各类简单排序:直接插入、直接选择和冒泡排序。 线性对数阶 (O(nlog2n)) 排序 快速排序、堆排序

程序员吴师兄的博客 2579

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

快速排序算法—图文详解,一篇就够了!

【图文详解】快速排序算法及Java实现 基本思想: 采用“分治”的思想,对于一组数据,选择一个基准元素(base),通常选择第一个或最后一个元素,通过第一轮扫描,比base小的元素都在base左边,比base大的元素都在base右边,再有同样的方法递归排序这两部分,直到序列中所有数据均有序为止。 图文详解 : 以 [3,4,6,1,2,4,7] 为例,以第一个元素3为base,定义左右两个指针(小熊l,小熊r),分别从两端开始扫描。从右向左找比3小的数,替换l所在位置的元素。再从左往右找比3大的数,然后替

qq_39181839的博客 23万+

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

c++ 桶排序(看这一篇就够了)

桶排序(Bucket Sort)又称箱排序,是一种比较常用的排序算法。其算法原理是将数组分到有限数量的桶里,再对每个桶分别排好序(可以是递归使用桶排序,也可以是使用其他排序算法将每个桶分别排好序),最后一次将每个桶中排好序的数输出。

Lucas55555555的博客 4187

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

最全排序算法及优化,看这一篇就够了

最全排序算法总结看这一篇就够了 没有经过总结的知识是沉重的,无用的 瞧一瞧~ 博健的LeetCode题解:Gitbook版本传送门 博健的LeetCode题解:优快云传送门 有趣的CSS:Gitbook传送门 前端进阶笔记:Gitbook传送门 目录 一、冒泡排序 二、选择排序 三、插入排序 四、希尔排序 五、归并排序 六、快速排序 一、冒泡排序(BubbleSort) 描述:...

余光的博客 1921

排序算法——看这一篇就够了!

排序算法——看这一篇就够了! 1、冒泡排序 ①. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。 ②. 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。这步做完后,最后的元素会是最大的数。 ③. 针对所有的元素重复以上的步骤,除了最后一个。 ④. 持续每次对越来越少的元素重复上面的步骤①~③,直到没有任何一对数字需要比较。 代码实现: //1.冒泡排序 in...

linhao_obj的博客 483

堆排序,看这一篇就够了!

简述了堆排序的描述、复杂度分析和java实现。

smalleyespanda的博客 1014

手撕排序算法(看这一篇就够了)

十大排序算法(Java代码实现) 下面动图来自网上摘取 常见的可分为俩大类: 基于比较: 通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此也称为非线性时间比较类排序 非比较: 不通过比较来决定元素间的相对次序,它可以突破基于比较排序的时间下界,以线性时间运行,因此也称为线性时间非比较类排序 1. 冒泡排序 基本思想是:1.比较相邻的元素。大的向后冒,和气泡一样浮起来...

qitong啊的博客 8259

上一篇下一篇 排序 (非ID字段排序)

  网上看了很多关于"上一篇下篇"的文章,可大都是按ID排序。   实际上,很少有按ID排序的。   分享下我的单独排序字段的写法,主要分为ms sql2000 和 ms 2005及以上版本。   SQL 2005及以上版本写法。 1 declare @currentID int 2 set @currentID=4 3 4 ;with temp 5 a...

SY5613的博客 321

MySQL高级查询语句——超详细,一篇就够了

MySQL高级查询语句一、MySQL进阶查询1.1、按关键字排序——order by1.2、对结果进行分组——group by1.2.1、单个分组1.2.2、分组结合order by使用1.3、限制结果条目二、MySQL数据库函数三、MySQL存储过程 一、MySQL进阶查询 1.1、按关键字排序——order by ■ 使用ORDER BY 语句来实现排序 ■ 排序可针对一个或多个字段 ■ ASC:升序,默认排序方式 ■ DESC:降序 ■ ORDER BY 的语法结构 SELECT column1, c

优快云著名博主 2万+

八大排序,看这一篇就够了!

思想:每一步将一个待排序的数据插入到前面已经排好序的有序序列中,直到插完所有元素为止动图如下: 代码实现: 2.选择排序 思想:每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完 动图如下:代码实现: 3.希尔排序 思想:对待排序数组中的元素进行分组,从第一个元素开始,按照数组下标中间隔为gap大小的元素分为一组,对每一组进行排序,重新选择gap的大小使得原始数据更加有序,当gap=1的时候就是插入排序代码实现: 希尔排序本质是对插

weixin_63028981的博客 826

Java排序,看这一篇就够了(List、Map、Object复合升序和降序)

Java排序,看这一篇就够了(List、Map、Object复合升序和降序)

西凉的悲伤博客 1万+

c++ 快速排序(看这一篇就够了)

快速排序是一种分治法(Divide and Conquer)的排序算法。它通过选取一个“基准”元素,将待排序的数组分成两部分,使得一部分的元素都小于等于基准元素,另一部分的元素都大于等于基准元素,然后递归地对这两部分分别进行排序,最终实现整个数组的有序排列不懂分治法的,先去看分治算法c++详解(看这一篇就够了)_分治算法 c++-优快云博客快速排序由在 1960 年提出,是一种基于**分治法(Divide and Conquer)**的高效排序算法。

Lucas55555555的博客 1171

常见排序算法,一篇就够!

依次下来获得升序数组。对于堆排序,需要读者对于堆的结构有较为清晰的理解,我们直接上代码:虽然堆排序的理解对于读者有较高的门槛,因为它需要读者了解二叉树,但我们接下来讲的交换排序非常友好。交换排序其中的快速排序,是几乎所有排序里面效率最高,应用最广的排序。在讲快速排序之前,我们先来看看交换排序里另外一个经典排序,就是我们的冒泡排序。

2301_79877271的博客 938
上一篇: 成天路由器,路由器究竟是什么
下一篇: 【详解】计算机网络从总到细——网络分层
Young-_-D
博客等级 码龄8年 62粉丝 106原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值