首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏myTest

    十大排序

    冒泡排序 public class BubbleSort { public static void main(String[] args) { int[] arr = {3, 2, 5, 4, 1, 6, 9, 7, 8, 0}; BubbleSort.sort(arr); for (int i : arr) { System.out.print int tmp = arr[index1]; arr[index1] = arr[index2]; arr[index2] = tmp; } } 桶排序 class BucketSort { public static void main(String[] args) { int[] arr = {3, 2, 5, 4, 1, 6, class CountSort { public static void main(String[] args) { int[] arr = {3, 2, 5, 4, 1, 6,

    37330编辑于 2025-02-12
  • 来自专栏springBoot3.0

    十大排序

    目录 1、冒泡排序(Bubble Sort) 2、选择排序(Selection Sort) 3、插入排序(Insertion Sort) 4、希尔排序(Shell Sort) 5、归并排序(Merge Sort) 6、快速排序(Quick Sort) 7、堆 排 序(Heap Sort) 8、计数排序(Counting Sort) 9、桶 排 序 (Bucket Sort) 10 基数排序(Radix Sort) 11、 总 结 首先排序算法可以分为内部排序算法和外部排序算法:在内存中进行的称为内部排序算法,也就是这里所说的这十种算法;相应的,当数据量很大时无法全部拷贝到内存需要使用外存,称为外部排序算法 接下来我们可用如下表来简单概括这十种算法: 十大经典排序算法 平均时间复杂度 最好时间复杂度 最坏时间复杂度 空间复杂度 排序方式 稳定性 冒泡排序 O \OmicronO(n2) O \OmicronO rightLen) { result[idx++] = arrRight[rightIdx++]; } return result; } } 6

    52540编辑于 2023-03-06
  • 来自专栏云计算与大数据技术

    十大排序之冒泡排序

    冒泡排序作为十大排序之一,是一种简单且稳定的排序算法 算法思想可以联想为向湖中下石头和较轻的石头变成泡泡上浮的过程 想象每一块石头处在相应的高度,从上往下相邻两个石头进行比较,较大的石头往下沉,替代下一石头的位置 因此,排序至多需要 n-1 趟(最后一趟只剩一个元素,因此不会再排序),最少需要1趟(已经有序) 算法思想:双重for循环,外层循环控制每次排序元素的长度(被排序的元素个数依次递减),内层循环遍历每轮循环的元素 时间复杂度:O(n^2)       空间复杂度:O(1) 代码实现:(未优化版) package com.gxwz.vo; import java.util.Arrays; /** * Java十大排序之冒泡排序 10, 16, 24, 26, 49, 100] [0, 2, 9, 10, 16, 24, 26, 49, 100] [0, 2, 9, 10, 16, 24, 26, 49, 100] 第 6 16, 24, 26, 49, 100] [0, 2, 9, 10, 16, 24, 26, 49, 100] 优化版: import java.util.Arrays; /** * Java十大排序之冒泡排序

    35530发布于 2021-04-27
  • 来自专栏CodeWwang

    十大排序算法

    , arr[i]); max_heapify(arr, 0, i - 1); } } int main() { int arr[] = { 3, 5, 3, 0, 8, 6, 1, 5, 8, 6, 2, 4, 9, 4, 7, 0, 1, 8, 9, 7, 3, 1, 2, 5, 9, 7, 4, 0, 2, 6 }; int len = (int) sizeof(arr for (int i = 0; i < len; i++) cout << arr[i] << ' '; cout << endl; return 0; } 6 计数排序不是比较排序排序的速度快于任何比较排序算法。 vecObj[--vecCount[vecRaw[i - 1]]] = vecRaw[i - 1]; } int main() { vector<int> vecRaw = { 0,5,7,9,6,3,4,5,2,8,6,9,2,1

    47530编辑于 2022-08-24
  • 来自专栏云计算与大数据技术

    十大排序之插入排序

    插入排序作为十大排序之一,是一种简单且稳定的排序算法 算法思想相对直观,可以联想自己平常打扑克牌,发牌时自己边摸牌边整理牌顺序的场景 算法思想:A[i] 与 A[i] 之前的元素 A[j逐个进行比较,如果 i  ] 适用场景:数据量小、有序或者部分有序的数列 时间复杂度:O(n^2)       空间复杂度:O(1) 代码实现: import java.util.Arrays; /** * Java十大排序之插入排序 : [2, 49, 26, 9, 16, 0, 10, 100, 24] [2, 26, 49, 9, 16, 0, 10, 100, 24] 第 3 趟排序: [2, 26, 49, 9, 16, 0, 10, 100, 24] [2, 9, 49, 26, 16, 0, 10, 100, 24] [2, 9, 26, 49, 16, 0, 10, 100, 24] 第 4 趟排序 26, 49, 16, 10, 100, 24] [0, 2, 9, 16, 49, 26, 10, 100, 24] [0, 2, 9, 16, 26, 49, 10, 100, 24] 第 6

    32020发布于 2021-04-27
  • 来自专栏Java架构师必看

    十大排序8–堆排序(Heap Sort)

    排序 文章目录 堆排序 基本介绍 大顶堆举例说明 堆排序的基本思想: 简单的思路 代码实现 将一个数组(二叉树), 调整成一个大顶堆 //编写一个堆排序的方法 完整代码 总结: 图解: 基本介绍 堆排序是利用堆这种数据结构二设计的一种排序算法,堆排序是一种选择排序,他的最好最坏,平均复杂度都为O(nlogn), 它也是不稳定排序 堆是具有一下性质的完全二叉树:每个节点的值都大于或者等于其左右孩子节点的值 将一个数组(二叉树), 调整成一个大顶堆 //将一个数组(二叉树), 调整成一个大顶堆 /** * 功能: 完成 将 以 i 对应的非叶子结点的树调整成大顶堆 * 举例 int arr[] = {4, 6, 8, 5, 9}; => i = 1 => adjustHeap => 得到 {4, 9, 8, 5, 6} * 如果我们再次调用 adjustHeap 传入的是 i = 0 => 得到 {4, 9, 8, 5, 6} => {9,6,8,5, 4} * @param arr 待调整的数组 * @param i 表示非叶子结点在数组中索引 * @param lenght 表示对多少个元素继续调整,

    59220发布于 2021-04-22
  • 来自专栏C++

    【C++】十大排序

    时间复杂度分析 选择排序 引言 选择排序(Selection Sort)是一种简单直观的排序算法。 引言 桶排序(Bucket Sort)是一种基于计数的排序算法,工作原理是将数据分到有限数量的桶子里,然后将桶子在分别排序(有可能在使用别的排序算法或者是以递归方式继续使用桶排序进行排序)。 动图展示 代码实现 int main() { int a[] = { 1,6,4,12,32,16,10,89,100,120 }; int b[10]; int sum[256] = { 0 } 引言 希尔排序(Shell Sort):是直接插入排序的一种优化,希尔排序通过基于直接插入排序间隔性的将非顺序序列的元素进行排序。 动图展示 动图分析 这里选择数组首元素6的位置作为基准元素的位置,接下来目的就是把数组分左边小于基准元素右边大于基准元素。

    22600编辑于 2024-11-19
  • 来自专栏AllTests软件测试

    十大经典排序算法

    十大经典排序算法 目录 1、前言 2、冒泡排序 3、选择排序 4、插入排序 5、希尔排序 6、归并排序 7、快速排序 8、堆排序 9、计数排序 10、桶排序 11、基数排序 1、 排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序 用一张图概括: 关于时间复杂度: 1、平方阶 (O(n2)) 排序 各类简单排序:直接插入、直接选择和冒泡排序 4、线性阶 (O(n)) 排序 基数排序,此外还有桶、箱排序。 关于稳定性: 稳定的排序算法:冒泡排序、插入排序、归并排序和基数排序。 不是稳定的排序算法:选择排序、快速排序、希尔排序、堆排序。 ; } gap = (int) Math.floor(gap / 3); } return arr; } } 6

    88720编辑于 2023-01-05
  • 来自专栏冷环渊的全栈工程师历程

    十大经典排序算法:快速排序debug分析排序过程

    思路分析 快速排序案例 排序过程断点调试 快速排序测速 快速排序 快速排序法介绍: 快速排序(Quicksort)是对冒泡排序的一种改进。 基本思想是:通过一趟排序将要排序的数据分割成独立的两 部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排 序,整个排序过程可以递归进行,以此达到整个数据变成有序序列 思路分析 快速排序的思路由上图所示: 首先是找到一个基准点,这个不一定非要是中位数,也可以是任意一位,可以自主分割,在什么位置都可以,这里我们以中位来学习 根据中位数为基准,将需要排序的数组分为两份 对 [-9,78,0,23,-567,70] 进行从小到大的排序,要求使用快速排序法。 ,再拿小冷的快速排序测试一下,算法的精妙之处一下就能感受到了

    45710编辑于 2022-01-26
  • 来自专栏与你一起学算法

    十大经典排序算法之希尔排序算法

    希尔排序 之前我们讲过冒泡排序、选择排序、插入排序,它们的时间复杂度都是 ,比较高,在实际的场景用应用也比较少。 今天我们要讲的希尔排序虽然也是插入排序的一种,但是它是插入排序的一个高效变形,脱离了 的时间复杂度深渊。 主要思想 希尔排序的思想简单点说就是有跨度的插入排序,这个跨度会逐渐变小,直到变为 1,变为 1 的时候也就是我们之前讲的简单插入排序了。 性能分析 希尔排序的时间复杂度不是我们表面认为的那样,一般来说认为希尔排序的时间复杂度是 ,这个证明起来比较难。 空间复杂度的话,希尔排序没有使用额外的空间,进行存储,是原地排序算法。 希尔排序算法不是稳定的排序算法。前面我们也提到过,只要涉及到大跨度的排序算法,一般都不是稳定的排序算法。 优化 希尔排序的优化主要是针对增量序列的优化。

    75830发布于 2021-03-23
  • 来自专栏java,python,数据结构,算法

    十大经典排序算法详解(二)希尔排序,归并排序,快速排序

    十大经典排序算法-希尔排序,归并排序,快速排序 前言 这是十大经典排序算法详解的第二篇,这是之前第一篇文章的链接:十大经典排序算法详解(一)冒泡排序,选择排序,插入排序,没有看过的小伙伴可以看一下. 按照算法思想不改动的版本: public static void main(String[] args) { int []num ={7,4,9,3,2,1,8,6,5,10}; long startTime 这里我们修改成直接和下一个for循环一起,直接进行循环分组 改进后的代码: public static void main(String[] args) { int []num ={7,4,9,3,2,1,8,6,5,10 sort(num, i+1, right); } } public static void main(String[] args) { int []num ={7,4,9,3,2,1,8,6,5,10 O(log N) 到这里十大经典排序算法详解的第二期内容就已经结束了.如果觉得UP的文章写得还可以或者对你有帮助的话,可以关注UP的公众号,新人UP需要你的支持!!!

    42930发布于 2021-01-25
  • 来自专栏java,python,数据结构,算法

    十大经典排序算法详解(二)希尔排序,归并排序,快速排序

    十大经典排序算法-希尔排序,归并排序,快速排序 前言 这是十大经典排序算法详解的第二篇,这是之前第一篇文章的链接:十大经典排序算法详解(一)冒泡排序,选择排序,插入排序,没有看过的小伙伴可以看一下. : 示例代码: 按照算法思想不改动的版本: public static void main(String[] args) { int []num ={7,4,9,3,2,1,8,6,5,10}; 这里我们修改成直接和下一个for循环一起,直接进行循环分组 改进后的代码: public static void main(String[] args) { int []num ={7,4,9,3,2,1,8,6,5,10 System.out.println(); return num; } public static void main(String[] args) { int []num ={7,4,9,3,2,1,8,6,5,10 sort(num, i+1, right); } } public static void main(String[] args) { int []num ={7,4,9,3,2,1,8,6,5,10

    41420编辑于 2022-01-06
  • 来自专栏精讲JAVA

    十大经典排序算法

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

    1.4K50发布于 2018-12-28
  • 来自专栏Java后端开发博客

    十大经典排序算法

    # 十大经典排序算法 介绍 关于时间复杂度 冒泡排序 插入排序 希尔排序 参考资料 # 介绍 排序算法是《数据结构与算法》中最基本的算法之一。 { public static void main(String[] args) throws Exception { int[] sourceArray = {1, 8, 6, arr[j] = tmp; } } return arr; } } 提示 传入的数组为{1, 8, 6, =1,j=1,tmp=8;while:j>0 && tmp<arr[0]:false ->false;j=i,if不成立,第一次循环resultarray:1,8 第二次循环,i=2,j=2,tmp=6; :j>0 && tmp<arr[0]:false -> false;j=1;i=2;if成立;arr[1] = 6 第二次循环resultarray:1,6,8 插入排序算法简答一句话就是:从第二个元素到最后一个元素

    63520编辑于 2022-12-30
  • 来自专栏全栈程序员必看

    十大排序算法详解(一)冒泡排序、选择排序、插入排序、快速排序、希尔排序

    稳定性 1.3.2 时间复杂度 1.3.3 适用场景 二、选择排序 2.1 选择排序基础【必会知识】 2.2 选择排序优化 2.2.1 选择排序优化图示 2.2.2 选择排序优化实现 2.3 选择排序的稳定性 1.3.3 适用场景   冒泡排序适用于数据量很小的排序场景,因为冒泡的实现方式较为简单。 二、选择排序 2.1 选择排序基础【必会知识】   选择排序是一种简单直观的排序算法。 四、快速排序 4.1 快速排序基础【必会知识】   快速排序也是一种较为基础的排序算法,其效率比冒泡排序算法有大幅提升。 此时,基准因子两边都有可能出现和基准因子相同的元素,如序列[1,3,2,4,3,4,6,3],如果选择了array[4]作为基准因子,那么array[1]和array[7]势必会被分到基准因子的同一侧, 5.1.1 排序过程图示   1>假如有[5,2,3,9,4,7]六个元素,第一趟取increment的方法是:6/3向下取整+1=3。

    1.2K50编辑于 2022-09-14
  • 来自专栏java,python,数据结构,算法

    十大经典排序算法详解(一)冒泡排序,选择排序,插入排序

    目录 1.算法的评判标准 2.排序算法的分类 3.十大经典排序算法-冒泡排序,选择排序,插入排序 3.1-冒泡排序 3.2-选择排序 3.3-插入排序 1.算法的评判标准 在讲解排序算法之前,我们首先来了解一下评判一个算法一般都是从哪些角度来评判的 ,这里我们还是通过下面的图来帮助大家加深印象. image.png 了解完上面这些概念之后,接下来我们讲解排序算法的时候提出的一些概念大家就能比较好的理解了. 3.十大经典排序算法-冒泡排序,选择排序, 算法图解: 示例代码 public static void main(String[] args) { int []num ={7,4,9,3,2,1,8,6,5,10}; long startTime : image.png 算法图解: 示例代码: public static void main(String[] args) { int []num ={7,4,9,3,2,1,8,6,5,10} 算法图解: 示例代码: public static void main(String[] args) { int []num ={7,4,9,3,2,1,8,6,5,10}; long startTime

    36210编辑于 2022-01-06
  • 来自专栏与你一起学算法

    十大经典排序算法之归并排序

    归并排序 前面的时候讲了一些时间复杂度是 的排序算法,虽然希尔排序不是 的排序算法,但是在真正的实际应用中还是比较少的,因为相对来说,排序所需的时间比较长。 今天我就给你介绍另外一种排序算法,归并排序算法。它的时间复杂度是 , 而且是稳定的排序算法,唯一美中不足的一点是它不是原地排序算法,需要使用额外的存储空间。 归并排序,采用的是分而治之的思想,将要排序的区间一分为二,当左右区间都有序后,就相当于对两个有序数组进行合并。那怎样左右区间的元素才能有序呢? tmp.extend(array[j:high+1]) array[low:high+1] = tmp if __name__ == "__main__": array1 = [3, 5, 6, 合并K个升序链表 总结 归并排序是非常高效的排序算法。 时间复杂度数 ,无论要排序的数据是什么样的,性能都是稳定的。 空间复杂度是 另外,合并操作是非常高效且常用的操作,值得我们学习体会。

    47920发布于 2021-03-23
  • 来自专栏java,python,数据结构,算法

    十大经典排序算法详解(一)冒泡排序,选择排序,插入排序

    目录 1.算法的评判标准 2.排序算法的分类 3.十大经典排序算法-冒泡排序,选择排序,插入排序 3.1-冒泡排序 3.2-选择排序 3.3-插入排序 1.算法的评判标准 在讲解排序算法之前 了解完上面这些概念之后,接下来我们讲解排序算法的时候提出的一些概念大家就能比较好的理解了. 3.十大经典排序算法-冒泡排序,选择排序,插入排序 3.1-冒泡排序 算法思想: 说到冒泡,大家的第一反应可能就是下图里面金鱼吐泡泡的画面 算法图解: 示例代码: public static void main(String[] args) { int []num ={7,4,9,3,2,1,8,6,5,10}; long startTime : 算法图解: 示例代码: public static void main(String[] args) { int []num ={7,4,9,3,2,1,8,6,5,10}; long 算法图解: 示例代码: public static void main(String[] args) { int []num ={7,4,9,3,2,1,8,6,5,10}; long startTime

    49860发布于 2021-01-21
  • 来自专栏全栈程序员必看

    十大经典排序算法-快速排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十大经典排序算法 -归并排序算法详解 十大经典排序算法-堆排序算法详解 十大经典排序算法-计数排序算法详解 十大经典排序算法-桶排序算法详解 十大经典排序算法-基数排序算法详解 一、什么是快速排序 1.概念 快速排序(Quick 快速排序在每一轮挑选一个基准元素,并让其他比它大的元素移动到数列一边,比它小的元素移动到数列的另一边,从而把数列拆解成了两个部分 2.算法原理 这是一个无序数列:4、5、8、1、7、2、6、3,我们要将它按从小到大排序 4比较,6比4大,right指针左移一位 2和4比较,2比4小,将2填入index中,原来2的位置成为新的index,left右移一位 随着left右移,right左移,最终left ,我们只需要对1、2和5、6这两个序列进行排序 第三轮排序结果如下所示 至此所有的元素都是有序的 3.算法实现 function sort(arr, startIndex, endIndex

    49330编辑于 2022-09-17
  • 来自专栏java,python,数据结构,算法

    十大经典排序算法详解(三)-堆排序,计数排序,桶排序,基数排序

    swap(num, i, big); } } public static void main(String[] args) { int []num ={7,4,9,3,2,1,8,6,5,10 adjustnode(i, end, num); } } public static void main(String[] args) { int []num ={5,3,7,1,4,6,2 算法图解: 示例代码: public static void main(String[] args) { int []num ={7,4,9,3,2,1,8,6,5,10}; long startTime ,意思就是0号桶存放是1~ 2数据范围的数据,1号桶存放3~4数据范围的数据,2号桶存放吧5 ~6数据范围内的数据.详细的放入规则我会在下面的实现步骤里面说.这里大家先简单了解一下. 这个系数就是最大元素的位数K,所以时间复杂度应该是O(n*k) 空间复杂度 空间复杂度我们也可以看出来,主要就是取决于链表的数量以及序列元素的数量,所以空间复杂度为O(n+k) 到这里十大经典排序算法详解的内容就已经全部讲解完毕了

    80550发布于 2021-02-02
领券