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

    java排序算法

    :冒泡排序是将相邻的数据进行对比,而选择排序是将下标为i和j的数据进行对比(每次选出当前数据集中最小的)。 3.插入排序   ①从第一个元素开始,该元素可以认为已经排序;   ②取出下一个元素,在已经排序的元素序列中从后往前进行扫描;   ③如果该元素(已排序)大于新元素,则将该元素移动到下一个位置;   ④ package InsertionSort; public class Test { public static void main(String[] args) { int[] a = {4,5,3,2,6,5,6,43 5.快速排序 package QuickSort; public class Test { public static void main(String[] args) { int[] num = {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) 原理:每一趟从待排序的记录中选出最小的元素,顺序放在已排好序的序列最后,直到全部记录排序完毕。 基于此思想的算法主要有简单选择排序、树型选择排序和堆排序。 所以,综上,简单排序的时间复杂度为 O(N2)。 java实现的快速排序算法 快速排序的原理:选择一个关键值作为基准值。比基准值小的都在左边序列(一般是无序的),比基准值大的都在右边(一般是无序的)。

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

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

    常见几种java排序算法 1.插入排序 2.分治排序法,快速排序法 3.冒泡排序 low版 4.冒泡排序 bigger版 5.选择排序 6. 归并排序 8. 层层细分 接下来,我们通过示图来展示上述分区算法思路的过程: public class QuickSort { public static void sort(int[] arr 选择排序 选择排序也是一种简单直观的排序算法,实现原理比较直观易懂: 首先在未排序数列中找到最小元素,然后将其与数列的首部元素进行交换,然后,在剩余未排序元素中继续找出最小元素,将其与已排序数列的末尾位置元素交换 6, 7, 6, 5, 1, 4, 2, 3, 8, 3] * `````````9 * ```````/ \ * `````7 6 * ````/ \ / \ * ``7 6 5 1 * `/ \ 6, 7, 7, 5, 1, 4, 2, 6, 3, 3] * `````````9 * ```````/ \ * `````8 6 * ````/ \ / \ * ``7 7 5 1 * `/ \

    91020编辑于 2022-07-28
  • 来自专栏ACM算法日常

    基础算法|5 快速排序

    我们之前学习了冒泡排序算法,我们知道,在冒泡排序过程中,只对相邻的两个元素进行比较,因此每次交换两个相邻的元素时只能消除一个逆序。 如果能通过两个(不相邻)元素的一次交换,消除多个逆序,则会大大加快排序的速度。而这就是本篇文章讲述的另一种基本排序算法——快速排序算法。 ---- 快速排序算法思想 通过一次元素的交换消除多个逆序,以提高排序的效率。 Sample Input 5 2 4 1 3 5 Sample Output 3 题意:有N(N为奇数)头奶牛产奶,求这N头奶牛产奶的中位数。 总述 快速排序算法是一种效率较高的排序算法,它是在冒泡排序的基础之上的进行改进得来的。你学会了吗ヾ(◍°∇°◍)ノ゙

    75420发布于 2018-11-07
  • 来自专栏乐行僧的博客

    5-希尔排序算法

    思想: 增量排序,先部分有序,然后整体有序。 与插入排序的思想是一致的。 不稳定的排序算法 #include <stdio.h> void show(int *a, int n) { int i = 0; for (i = 0; i < n; i++) a[j] = x; } d /= 3; } } int main() { int a[] = {3, 1, 2, 4, 7, 0, 5,

    23340编辑于 2022-02-25
  • 来自专栏AllTests软件测试

    Java常见排序算法

    Java常见排序算法 目录 1、归并排序 2、堆排序 3、基数排序 4、冒泡排序 5、希尔排序 6、快速排序 7、插入排序 8、选择排序 1、归并排序 1、基本思想 归并排序(MERGE-SORT 而冒泡排序之所以叫冒泡排序,正是因为这种排序算法的每一个元素都可以向小气泡一样,根据自身大小,一点一点向着数组的一侧移动。 2、代码实现 5、希尔排序 1、基本思想 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,每组包含的关键词越来越多,当增量减至1时,整个文件恰被分成一组,算法便终止 值得注意的是,快速排序不是一种稳定的排序算法,也就是说,多个相同的值的相对位置也许会在算法结束时产生变动。 (2)然后再用第三个数和第二个比较,符合则交换,但是此处还得继续往前比较,比如有5个数8,15,20,45,17,17比45小,需要交换,但是17也比20小,也要交换,当不需要和15交换以后,说明也不需要和

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

    冒泡排序算法Java

    大家好,又见面了,我是全栈君 冒泡排序即每次遍历。相邻数字间进行比較,前者大于后者进行交换,不断将最大值后移,直至沉至最后位置;算法关键要点在于确定每次循环的边界。 后面两种算法则是对冒泡排序一定程度上的改良,但相对于其它排序算法,冒泡排序性能依旧较差。 j++) { if(data[j] > data[j + 1]) { swap(data, j , j + 1); } } } } //改进算法 data[j + 1]) { swap(data, j , j + 1); flag = true; } } index--; } } //改进算法二 (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(arr)

    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
  • 来自专栏明志德到的IT笔记

    C# 排序算法5:归并排序

    归并排序,是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个有序的子序列,再把有序的子序列合并为整体有序序列。该算法是采用分治法。 原理:   1.申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列   2.设定两个指针,最初位置分别为两个已经排序序列的起始位置   3.比较两个指针所指向的元素,选择相对小的元素放入到合并空间 ,并移动指针到下一位置   4.重复步骤3直到某一指针超出序列尾,将另一序列剩下的所有元素直接复制到合并序列尾 图示:  上图中首先把一个未排序的序列从中间分割成2部分,再把2部分分成4部分,依次分割下去 tempArr[tempIndex++]; } return arr; } 运行结果 Console.WriteLine($"数据算法 "); var arr1 = GetArrayData(20, 1,22); Console.WriteLine($"生成未排序数据

    37220编辑于 2023-10-21
  • 来自专栏代码伴一生

    java选择排序算法

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

    98700发布于 2021-09-19
  • 来自专栏yang0range

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

    概念: 通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分小,则可分别对这两部分记录继续进行排序,直到整个序列有序。 这个操作称为分区 (partition) 操作,分区操作结束后,基准元素所处的位置就是最终排序后它的位置。 对”基准”左边和右边的两个子集,不断重复第一步和第二步,直到所有子集只剩下一个元素为止。 : 例如我们有个一个数组[29 4 10 11 7] 1.首先我们先选定一个基准元素,这里我们选择10作为基准元素,然后把基准元素放在最后一个,如果选择最后一个元素作为基准元素,那么可以省略 快速排序 循环i = 1的时候,找到一个小于基准元素的元素4 这个时候storeIndex = 1 快速排序 ↓ 4 29 11 7 10 之后循环到i

    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. */ public class ShellSort { public static void main(String[] args) { int[] arr = {1, -2, 2, -3, 5,

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

    排序算法之选择排序-java

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

    1K20发布于 2020-04-12
  • 来自专栏Hsinyan写字的地方

    Python算法实践Week5-排序算法

    选择排序共需比较N-1轮,总共比较的轮数为(N-1)+(N-2)+...+2+1=N(N-1)/2次 选择排序执行交换的次数是N-1次 0x02 冒泡排序 算法思想 第一轮比较:从第一个元素开始,按照顺序对列表中所有 第二轮比较:从第一个元素开始,对列表中前N-1个元素之间进行两两比较,使第二大的数字沉到最后 以此类推,N-1轮后,排序完毕 冒泡排序算法的实现 list = [77, 42, 35, 10, 22, 算法主要时间消耗是比较的次数 冒泡算法共需比较N-1轮,总共比较次数为(N-1)+(N-2)+...+2+1=N(N-1)/2次 冒泡排序执行交换的次数不确定 冒泡排序是一种执行效率很低的排序算法 0x03 算法思想 将包含N个元素的列表拆分成两个含N/2个元素的子列表 对两个子列表递归调用归并排序(最后可将整个列表分为N个子列表) 合并两个已经排序好的子列表 归并排序算法的实现 def merge(left , 11, 10, 33, 42] temp = mergeSort(a) print(temp) python语言系统提供的排序算法,底层就采用了归并排序算法实现 a = sorted([24, 8,

    42610编辑于 2022-06-19
  • 来自专栏C/C++与音视频

    排序算法5----归并法

    归并排序也称合并排序,其算法思想是将待排序序列分为两部分,依次对分得的两个部分再次使用归并排序,之后再对其进行合并。

    33930编辑于 2022-06-14
  • 来自专栏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),平均 ? Java实现: public static int[] quickSort(int[] n, int low, int high) { int lowMark = low, highMark } //将记录值写到最后低位指针的位置 n[lowMark] = record; //两边分别进行排序操作

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

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

    然后算法再取越来越小的步长进行排序算法的最后一步就是普通的插入排序,但是到了这步,需排序的数据几乎是已排好的了(此时插入排序较快)。 希尔排序是基于插入排序的以下两点性质而提出改进方法的: 插入排序在对几乎已经排好序的数据操作时, 效率高, 即可以达到线性排序的效率 但插入排序一般来说是低效的, 因为插入排序每次只能将数据移动一位 原理 列如:我们有一个数组[ 13 14 94 33 82 25 59 94 65 23 45 27 73如果我们以步长为5开始进行排序,我们可以通过将这列表放在有5列 13 14 94 33 82 25 59 array[j + number] = temp; } number = number / 2; } } 算法系列 : 冒泡排序 选择排序 直接插入排序 二分插入排序 希尔排序排序 完整代码: Java和Kotlin代码我均放在了GitHub上,欢迎Star!

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

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

    创建最大堆(Build_Max_Heap):将堆所有数据重新排序排序(HeapSort):移除位在第一个数据的根节点,并做最大堆调整。 图解:列如我们有原始数字[2 10 9 5 6 1] 下面我们用堆排序排序 原始为: ? 第一次: ? 第二次 ? 我们得到了 ? 代码实现: /** * 堆排序的主要入口方法,共两步。 * 直至未排序的堆长度为 0。 } } 算法系列: 冒泡排序 选择排序 直接插入排序 二分插入排序 希尔排序排序 完整代码: Java和Kotlin代码我均放在了GitHub上,欢迎Star!

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