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

    排序算法-2

    排序,又简单,又快速,适合处理大量数据 桶排序 #include<iostream> using namespace std; int n ; int a[1000]; // O(m+n) int i<=n;++i) { int t; cin>>t; a[t]++; } //桶排序 { cout<<i<<" "; } } cout<<endl; } return 0; } 归并排序 i+1; ll c2 = 2*i+2; ll max = i; if(c1<n&&tree[c1]>tree[max]) { max = c1; } if(c2<n&&tree[c2]> tree[max]) { max = c2; } if(max !

    30610发布于 2020-04-14
  • 来自专栏一英里广度一英寸深度的学习

    线性排序算法-堆排序 (2)

    朴素思想是采用快速排序,选最小的。那么,出队复杂度O(1),入队复杂度二分查找O(logn)。但每次插入,都需要移动O(n)的元素。 self.heap[j] = tmp def swapUp(self,index): while(index>0): parent = (index-1)//2 else: break def swapDown(self,index): lchild = index*2+ self.swap(index,rchild) index = rchild lchild = index*2+ self.swap(index,lchild) index = lchild lchild = index*2+

    75630发布于 2018-09-12
  • 来自专栏java初学

    java排序算法

    { temp = num[j]; num[j] = num[j - 1]; num[j - 1] = temp; } } } } } 2. :冒泡排序是将相邻的数据进行对比,而选择排序是将下标为i和j的数据进行对比(每次选出当前数据集中最小的)。 3.插入排序   ①从第一个元素开始,该元素可以认为已经排序;   ②取出下一个元素,在已经排序的元素序列中从后往前进行扫描;   ③如果该元素(已排序)大于新元素,则将该元素移动到下一个位置;   ④ ,赋值操作的比较次数是n(n-1)/2+(n-1)次。 = {3,4,5,32,3,5,2,78}; Test test = new Test(); test.quickSort(num, 0, num.length - 1); for(int

    1.5K170发布于 2018-05-14
  • 来自专栏卯金刀GG

    算法基础】java 排序算法

    Java中的经典算法之冒泡排序(Bubble Sort) 原理:比较两个相邻的元素,将值大的元素交换至右端。 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。 二、算法描述 假定n是数组的长度, 首先假设第一个元素被放置在正确的位置上,这样仅需从1-n-1范围内对剩余元素进行排序。 中的经典算法之选择排序(SelectionSort) a) 原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕。 也就是:每一趟在n-i+1(i=1,2,…n-1)个记录中选取关键字最小的记录作为有序序列中第i个记录。基于此思想的算法主要有简单选择排序、树型选择排序和堆排序。 当序列反序时,移动次数最多,为3N (N - 1) / 2。 所以,综上,简单排序的时间复杂度为 O(N2)。 java实现的快速排序算法 快速排序的原理:选择一个关键值作为基准值。

    1.3K20发布于 2019-07-26
  • 来自专栏全栈程序员必看

    java的几种排序算法(常用排序算法)

    常见几种java排序算法 1.插入排序 2.分治排序法,快速排序法 3.冒泡排序 low版 4.冒泡排序 bigger版 5.选择排序 6. 归并排序 8. 比较 1.插入排序 这个打麻将或者打扑克的很好理解, 比如有左手有一副牌1,2,4,7 ,来一张3的牌, 是不是就是手拿着这张牌从右往左插到2,4之间 一次插入排序的操作过程: 将待插元素,依次与已排序好的子数列元素从后到前进行比较 层层细分 接下来,我们通过示图来展示上述分区算法思路的过程: public class QuickSort { public static void sort(int[] arr 选择排序也是一种简单直观的排序算法,实现原理比较直观易懂: 首先在未排序数列中找到最小元素,然后将其与数列的首部元素进行交换,然后,在剩余未排序元素中继续找出最小元素,将其与已排序数列的末尾位置元素交换 } 另外一个坑, child<=end这里要用大于等于号, 以及后面的rightson <= end .因为我就写着写着忘记了end是最后处理的下标, 而不是数组长度, 习惯性用的<号, 导致最后2个无法排序

    91020编辑于 2022-07-28
  • 来自专栏数据云团

    算法篇-python排序算法-2

    冒泡排序|插入排序|选择排序 回顾下写过的代码,理一理~ >冒泡排序 ? >插入排序 ? >选择排序 ? 接下来是快排啦,别刹不住车呀~稳着点开比较好 ? >快速排序 让指定的元素归位,就是放到它应该放的位置(左边元素比它小,右边元素比他大),然后对每个元素归位,完成排序。 有没有想到思路?

    65330发布于 2019-07-18
  • 来自专栏明志德到的IT笔记

    C# 排序算法2:选择排序

    每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,            2. 再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。            3. .以此类推,直到全部待排序的数据元素排完。 int minValueIndex = i; //最小值的下标位置,初始设为第一个位置 for (int j = i+1; j < arr.Length; j++)// 2. static void Main(string[] args) { Console.WriteLine($"数据算法"); var var arr2 = BubbleSort(arr1); Console.WriteLine($"冒泡排序:{ShowArray(arr2)}"); var

    39010编辑于 2023-10-21
  • 来自专栏AllTests软件测试

    Java常见排序算法

    Java常见排序算法 目录 1、归并排序 2、堆排序 3、基数排序 4、冒泡排序 5、希尔排序 6、快速排序 7、插入排序 8、选择排序 1、归并排序 1、基本思想 归并排序(MERGE-SORT 2、代码实现 2、堆排序 1、基本思想 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。 而计数排序则是打表或是哈希思想最简单的实现。 2算法优化 在算法的原理中,我们是以一张二维数组的表来存储这些无序的元素。使用二维数组有一个很明显的不足就是二维数组太过稀疏。数组的利用率为10%。 2、代码实现 5、希尔排序 1、基本思想 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止 2、代码实现 8、选择排序 1、算法思想 从头至尾扫描序列,找出最小的一个元素,和第一个元素交换,接着从剩下的元素中继续这种选择和交换方式,最终得到一个有序序列。 2、代码实现

    70420编辑于 2022-07-26
  • 来自专栏全栈程序员必看

    冒泡排序算法Java

    大家好,又见面了,我是全栈君 冒泡排序即每次遍历。相邻数字间进行比較,前者大于后者进行交换,不断将最大值后移,直至沉至最后位置;算法关键要点在于确定每次循环的边界。 后面两种算法则是对冒泡排序一定程度上的改良,但相对于其它排序算法,冒泡排序性能依旧较差。 j++) { if(data[j] > data[j + 1]) { swap(data, j , j + 1); } } } } //改进算法 若无移动,则表示 //排序已经完毕,无需在进行下一次继续循环 public void bubble_sort2(int[] data) { int n = data.length; boolean static void main(String[] args) { Bubble_Sort bubble_Sort = new Bubble_Sort(); int data[] = {2,34,45,2,13,24,5,24,57

    56530编辑于 2022-07-06
  • 来自专栏大数据技术栈

    Java算法--堆排序

    package arithmetic; import breeze.stats.distributions.Rand; import java.util.Collections; import java.util.Random ; public class HeapSort { public static void main(String[] args) { int[] arr = {1, 2, 3 , 4, 5, 6,21,24,546,65,34,65,768,9,5,2,3,5,6,344,32,12,14, 7, 8, 9}; shuffle(arr); sort for (int i : arr) { int i1 = (int) (Math.random() * (arr.length)); int i2 = (int) (Math.random() * (arr.length)); swap(arr, i1, i2); } } public static

    54710发布于 2019-10-30
  • 来自专栏zcqshine's blog

    JAVA 快速排序算法

    之前在 CSDN 上看到一个 Java 快速排序算法的例子, 觉得这个代码写的挺好的, 就保存了. --] = a[i]; } a[i] = index;// 将基准数值替换回 a[i] sort(a, low, i - 1); // 对低子表进行递归排序 sort(a, i + 1, hight); // 对高子表进行递归排序 } public static void quickSort(int a[]) {

    1.5K60发布于 2018-05-11
  • 来自专栏代码伴一生

    java选择排序算法

    /** 选择排序:执行完一次内for循环后最小的一个数放在了数组的最前面。 * 每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 / public class SelectSort { /** 排序算法的实现,对数组中指定的元素进行排序 * @param array 待排序的数组 @param from 从哪里开始排序 @param 测试 * @param args */ public static void main(String[] args) { Integer[] intgArr = { 5, 9, 1, 0, 4, 2,

    98700发布于 2021-09-19
  • 来自专栏目标检测和深度学习

    常用排序算法总结(2

    来源:SteveWang http://www.cnblogs.com/eniac12/p/5332117.html 上一篇总结了常用的比较排序算法,主要有冒泡排序,选择排序,插入排序,归并排序,堆排序 这篇文章中我们来探讨一下常用的非比较排序算法:计数排序,基数排序,桶排序。在一定条件下,它们的时间复杂度可以达到O(n)。 这里我们用到的唯一数据结构就是数组,当然我们也可以利用链表来实现下述算法。 例如:对0到99之间的数字进行排序,计数排序是最好的算法,然而计数排序并不适合按字母顺序排序人名,将计数排序用在基数排序算法中,能够更有效的排序数据范围很大的数组。 工作的原理是将数组元素映射到有限数量个桶里,利用计数排序可以定位桶的边界,每个桶再各自进行桶内排序(使用其它排序算法或以递归方式继续使用桶排序)。 数组 // 最差时间复杂度 ---- O(nlogn)或O(n^2),只有一个桶,取决于桶内排序方式 // 最优时间复杂度 ---- O(n),每个元素占一个桶 // 平均时间复杂度 ---- O(n)

    54140发布于 2018-07-20
  • 来自专栏yang0range

    Java常见排序算法详解——快速排序

    概念: 通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分小,则可分别对这两部分记录继续进行排序,直到整个序列有序。 这个操作称为分区 (partition) 操作,分区操作结束后,基准元素所处的位置就是最终排序后它的位置。 对”基准”左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。 ↓ 29 4 11 7 10 2.从左到右(除了最后的元素),循环移动小于基准元素到数据开头,留下大于等于基准元素的接在后面。 =3时7小于10和storeIndex = 1换位置 4 7 11 29 10 这个时候storeIndex = 2 3.再然后,我们把基准元素放到storeIndex的位置,其他元素位置依次 arr.length <= 1) { return; } int i = head, j = tail, pivot = arr[(head + tail) / 2]

    78830发布于 2019-04-22
  • 来自专栏码字搬砖

    排序算法之希尔排序-Java

    希尔排序 1.1 希尔排序的基本介绍 1.2 希尔排序思想 1.3 希尔排序的时间复杂度和空间复杂度等 2. 代码演示 1. 希尔排序 1.1 希尔排序的基本介绍 希尔排序是加强版的插入排序,相对与普通的插入排序做了优化,比普通的插入排序多了一个步长的概念 1.2 希尔排序思想 就是把数据下标按照一定的步长进行分组,然后每组分别用普通插入排序进行排序 ,知道步长减至为 1 时,算法终止。 1.3 希尔排序的时间复杂度和空间复杂度等 算法名称 平均时间复杂度 最好情况 最坏情况 空间复杂度 稳定性 希尔排序 O(nlogn) O(nlogn) O(nlogn) O(1) 不稳定 2. 2, -3, 5, 0}; for (int gap = arr.length / 2; gap > 0; gap /= 2) { for (int j = gap; j <

    86710发布于 2020-04-13
  • 来自专栏码字搬砖

    排序算法之选择排序-java

    选择排序 1.1 选择排序的基本介绍 选择排序类似于冒泡排序,均属于内排,也可以看做是对冒泡排序的优化。因为冒泡排序是比较相邻的两个值,然后直接交换。 而选择排序是找到一个最大值或者最小值之后,再进行交换。 1] 交换; 第二次从 arr[2] ~ arr[n-1]中选择一个最大值或者最小值,与 arr[2] 交换; 依次类推。 1.3 选择排序的时间复杂度和空间复杂度等 算法名称 平均时间复杂度 最好情况 最坏情况 空间复杂度 稳定性 选择排序 O(n^2) O(n) O(n^2) O(1) 稳定 2. /3/30 */ public class SelectSort { public static void main(String[] args) { int[] arr = {1, 10, 2,

    1K20发布于 2020-04-12
  • 来自专栏yang0range

    Java常见排序算法详解——冒泡排序

    转载请注明出处:[https://www.jianshu.com/p/df900e6ddbac 我们在面试的时候时常会问到我们算法题,而算法题当中排序算法题是问到最多的。 应广大同学的建议,我特意整理了一下Java常见的排序算法,我尽量从概念,原理,代码这几方面详细阐述旨在让大家知道、理解、应用。 29 1 11 2 10 3 5 4 7 5 4 我们可以看到,经过第一趟的排序之后。 代码实现: Java实现 /** * @author yangzc * @data 2019/4/8 22:21 * @desc 冒泡排序 */ public class BubbleSort : 选择排序 代码: Java和Kotlin代码我均放在了GitHub上,欢迎Star!

    86200发布于 2019-04-18
  • 来自专栏算法与编程之美

    JAVA实现常见排序算法 快速排序

    基本思想:用选取的初始值(一般是第一个)将待排序序列分为小于初始值和大于初始值的两部分,然后重复此操作,最终到排序完成。 该算法是一个不稳定的算法(如果待排序序列中存在相同的元素,经过排序后他们的相对位置不发生改变那么这个算法就是稳定的排序算法) 空间复杂度最坏为O(n),平均 ? 时间复杂度最坏为O(n2),最好为 ? Java实现: public static int[] quickSort(int[] n, int low, int high) { int lowMark = low, highMark - 1); quickSort(n, lowMark + 1, high); } return n; } where2go

    96320发布于 2019-07-17
  • 来自专栏yang0range

    Java常见排序算法详解——希尔排序

    然后算法再取越来越小的步长进行排序算法的最后一步就是普通的插入排序,但是到了这步,需排序的数据几乎是已排好的了(此时插入排序较快)。 : 先取一个正整数 d1(d1 < n),把全部记录分成 d1 个组,所有距离为 d1 的倍数的记录看成一组,然后在各组内进行插入排序 然后取 d2(d2 < d1) 重复上述分组和排序操作;直到取 一般选 d1 约为 n/2,d2 为 d1 /2, d3 为 d2/2 ,…, di = 1。 实现代码: public void sort() { int number = array.length / 2; int i; int j; } } 算法系列: 冒泡排序 选择排序 直接插入排序 二分插入排序 希尔排序排序 完整代码: Java和Kotlin代码我均放在了GitHub上,欢迎Star!

    63600发布于 2019-04-18
  • 来自专栏yang0range

    Java常见排序算法详解——堆排序

    二叉树的每个结点至多只有二棵子树(不存在度大于 2 的结点),二叉树的子树有左右之分,次序不能颠倒。 二叉树的第 i 层至多有 2i - 1 个结点;深度为 k 的二叉树至多有 2k - 1 个结点;对任何一棵二叉树 T,如果其终端结点数为 n0,度为 2 的结点数为 n2,则n0 = n2 + 1。 创建最大堆(Build_Max_Heap):将堆所有数据重新排序排序(HeapSort):移除位在第一个数据的根节点,并做最大堆调整。 图解:列如我们有原始数字[2 10 9 5 6 1] 下面我们用堆排序排序 原始为: ? 第一次: ? 第二次 ? 我们得到了 ? } } 算法系列: 冒泡排序 选择排序 直接插入排序 二分插入排序 希尔排序排序 完整代码: Java和Kotlin代码我均放在了GitHub上,欢迎Star!

    1.1K00发布于 2019-04-18
领券