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

    试题 算法训练 5-2求指数

    .*; public class qiuzhishu { /** * @param args * 试题 算法训练 5-2求指数 */ public static void main(String

    57720编辑于 2022-07-13
  • 来自专栏技术博文

    算法-排序算法-选择排序

    /** * 排序算法-选择排序 * 选择排序(Selection Sort)算法也是比较简单的排序算法,其思路比较直观。选择排序算法在每一步中选取最小值来重新排列,从而达到排序的目的。 * 选择排序算法通过选择和交换来实现排序,其排序流程如下: * (1)首先从原始数组中选择最小的1个数据,将其和位于第1个位置的数据交换。 至此,便完成了对原始数组的从小到大的排序。 * * 选择排序算法在对n个数据进行排序时,无论原数据有无顺序,都需要进行n-1步的中间排序。 * 这种排序方法思路很简单直观,但是缺点是执行的步骤稍长,效率不高。 size; i++) { ints[i] = (int)(Math.random() * 100 ); } System.out.println("排序前的数组

    2.3K30发布于 2021-03-11
  • 来自专栏技术博文

    算法-排序算法-快速排序

    /** * 排序算法-快速排序 * 快速排序(Quick Sort)算法和冒泡排序算法类似,都是基于交换排序思想的。快速排序算法对冒泡排序算法进行了改进,从而具有更高的执行效率。 * 快速排序算法通过多次比较和交换来实现排序,过程如下: * (1)首先设定一个分界值,通过该分界值将数组分成左右两部分。 * (3)然后,左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值,将该部分数据分成左右两部分,同样将左边放置较小值,右边放置较大值。右侧的数组数据也可以做类似处理。 当左、右两部分各数据排序完成后,整个数组的排序也就完成了。 :" + Arrays.toString(ints)); quickSortFun(ints, 0, size - 1); System.out.println("排序后的数组

    1.4K10发布于 2021-03-17
  • 来自专栏技术博文

    算法-排序算法-希尔排序

    /** * 排序算法-希尔排序 * 冒泡排序算法、选择排序算法和插入排序算法,虽然思路比较直观,但是排序的效率比较低。 * 对于大量的数据需要排序时,往往需要寻求其他更为高效的排序算法。 Shell排序算法便是其中一种 * Shell排序算法严格来说基于插入排序的思想,其又称为希尔排序或者缩小增量排序,思路如下: * (1)将有n个元素的数组分成n/2个数字序列,第1个数据和第n/2 * (3)然后,再变为n/4个序列,再次排序。 * (4)不断重复上述过程,随着序列减少最后变为一个,也就完成了整个排序。 size; i++) { ints[i] = (int)(Math.random() * 100 ); } System.out.println("排序前的数组 :" + Arrays.toString(ints)); } System.out.println("排序后的数组:" + Arrays.toString(ints))

    1.2K20发布于 2021-03-12
  • 来自专栏技术博文

    算法-排序算法-冒泡排序

    /** * 排序算法-冒泡排序 * 冒泡排序(Bubble Sort)算法是所有排序算法中最简单、最基本的一种。 * 冒泡排序算法的思路就是交换排序,通过相邻数据的交换来达到排序的目的。 * 冒泡排序的思路: * (1)对数组中的各数据,依次比较相邻的两个元素的大小。 * (2)如果前面的数据大于后面的数据,就交换这两个数据。经过第一轮的多次比较排序后,便可将最小的数据排好。 * 冒泡排序算法在对n个数据进行排序时,无论原数据有无顺序,都需要进行(i = n-1)次的外层循环。 * 每次内部的排序随着步骤的递增,需要排序的数据逐步减少,所以需要 (n - i)次的内层循环,注意:i从1开始 */ import java.util.*; public class BubbleSort :" + Arrays.toString(ints)); } System.out.println("最终排序后的数组:" + Arrays.toString(ints)

    1.5K20发布于 2021-03-08
  • 来自专栏技术博文

    算法-排序算法-插入排序

    /** * 排序算法-插入排序 * 插入排序(Insertion Sort)算法通过对未排序的数据执行逐个插入至合适的位置而完成排序工作。 * 插入排序算法的思路比较简单,应用比较多。 * 插入排序算法通过比较和插入来实现排序,其排序流程如下: * (1)首先对数组的前两个数据进行从小到大的排序。 * (2)接着将第3个数据与排好序的两个数据比较,将第3个数据插入合适的位置。 最后,便完成了对原始数组从小到大的排序。 * * 插入排序算法在对n个数据进行排序时,无论原数据有无顺序,都需要进行n-1步的中间排序。 * 这种排序方法思路简单直观,在数据已有一定顺序的情况下,排序效率较好。但如果数据无规则,则需要移动大量的数据,其排序效率也不高。 size; i++) { ints[i] = (int)(Math.random() * 100 ); } System.out.println("排序前的数组

    95220发布于 2021-03-11
  • 来自专栏用代码征服天下

    算法——排序算法

    1、冒泡排序  基本思想:现在有一个数组arr= {12,35,99,18,76},需要将其从小到大排序 第一次冒泡:首先我们将数组第一个数(arr[0])和第二个数(arr[1])进行比较,如果第二个数比第一个数大 : 原理:每一次循环从未排序的数中找出最小的数,然后与已经排好序的数的下一个数进行交换,直到全部记录排序完毕 基本思想:给定数组:int[] arr={里面n个数据},第一次排序从arr[0]~arr[ --------- 第二趟排序: 原始数据:8 3 7 5 6(2已经排好序了,不需要再排序了) 最小数据3,8和3交换 排序结果:2 3 8 7 5 6 ----------------------- -------------------------------- 第三趟排序: 原始数据:8 7 5 6(2、3已经排好序了,不需要再排序了) 最小数据5,5和8交换 排序结果:2 3 5 7 8 6 6已经排好序了,不需要再排序了) 最小数据7,7和8交换 排序结果:2 3 5 6 7 8 排序完成 代码示例: 1 package com.alibaba; 2 3 import org.junit.jupiter.api.Test

    1.1K10编辑于 2022-05-09
  • 来自专栏JavaEE

    排序算法 --- 桶排序

    一、排序思想 之前将的计数排序,有些局限性,比如数列最大值和最小值差距不能太大,而且只能排整数。桶排序就对这些局限性做了弥补。桶排序的思想就是每个桶代表一个区间范围,里面可以装若干个元素。 然后对这些桶内部进行排序,最后遍历这些桶,那么数列就是有序的了。 桶排序 然后开始遍历原始数列,把元素放入对应的桶中,如下: ? 桶排序 对每个桶内部的元素进行排序,如下: ? 桶排序 最后遍历所有的桶,输出的元素就是有序的了。 桶排序的缺点:如果数据分布不均衡,比如最大值1000,最小值0.5,剩余元素都是零点几的,也就是说最后一个桶放最大元素,其他元素都在第一个桶,这样性能就会下降,并且创建了很多空桶,浪费空间。 (arrNum - 1) / (max - min)); buckets.get(num).add(arr[i]); } // 对每个桶内部进行排序

    63651发布于 2020-10-10
  • 来自专栏JavaEE

    排序算法 --- 快速排序

    一、排序思想 将数组中的一个数作为基准,比该数小的放到左边,比该数大的放到右边; 对左右两边再进行上述操作,即把左边当成一个新数组,找新的基准数,右边也一样; 直到不能再分割下去为止。 ---- 案例: 假如待排序列如下: ? 初始状态 选定6为基准数,然后先从右边开始遍历,找到一个比基准数小的数,如下图: ? 第一躺排序完成 此时6左边的都是比它小的,右边的都是比它大的。左边部分和右边部分看成是两个新的待排序列,两个序列都按照上述方式再进行排序,先排左边,再排右边。 ,表示i和j相等,左右指针相遇了,交换基准数和此时指针指的元素 arr[left] = arr[i]; arr[i] = base; // 此时,第一躺排序完成 ,左边和右边看成新数组,重复上述步骤 sort(arr, j+1, right); // 排右边 sort(arr, left, i-1); // 排左边 } 快速排序之所以成为快速排序

    98231发布于 2020-10-10
  • 来自专栏程序编程之旅

    排序算法:冒泡排序

    冒泡排序算法的运作如下:(从后往前) ​1.比较相邻的元素。如果第一个比第二个大,就交换他们两个。 2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。 若记录序列的初始状态为”正序”,则冒泡排序过程只需进行一趟排序,在排序过程中只需进行n-1次比较,且不移动记录;反之,若记录序列的初始状态为”逆序”,则需进行n(n-1)/2次比较和记录移动。 因此冒泡排序总的时间复杂度为O(n*n)。 : 在排序过程中,执行完最后的排序后,虽然数据已全部排序完备,但程序无法判断是否完成排序,为了解决这一不足,可设置一个标志位flag,将其初始值设置为非0,表示被排序的表是一个无序的表,每一次排序开始前设置 在新一轮排序开始时,检查此标志,若此标志为0,表示上一次没有做过交换数据,则结束排序;否则进行排序;

    84120发布于 2021-01-21
  • 来自专栏程序编程之旅

    排序算法:希尔排序

    希尔排序法(缩小增量法) 属于插入类排序,是将整个无序列分割成若干小的子序列分别进行插入排序的方法。 //shell排序 /* 基本思想:将序列分成几类,在类里将它分成几个小组,再让它在小组内进行排序,依次重复直至排序成功 1,找出间距gap(分类)最后间距分类必须为1, 第一重循环 2, 找出各组 , j,flag,gap=n; int tmmp; while(gap>1) { gap=gap/2;//缩小增量,每次减半 do//子序列应用冒泡排序 =0);//优化冒泡排序 } } main() { int i,a[10] = {-12,23,345,1,34,-45,34,3,2,5}; printf("原序列的元素排序为 for(i=0; i<10; i++) { printf("%d ",a[i]); } shellsort(a,10); printf("\n排序后的元素位置

    44410发布于 2021-01-21
  • 来自专栏程序编程之旅

    排序算法:选择排序

    选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 //1 选择排序 selectSort1(a); print(a); long endTime = System.currentTimeMillis()

    1.3K20发布于 2021-01-21
  • 来自专栏学习

    【排序算法】冒泡排序

    2.数据演示 例如: 第0次排序:5  1  6  3  2  9 第1次排序:1  5  3  2  6  9 第2次排序:1  3  2  5  6  9 第3次排序:1  2  3  5 ; 即每次交换时,都要将最大的数放在队尾部分,且最后一次交换后,最小的数就不用比较了,所以循环次数为数组长度减去1; 3.算法思路 小编认为,在写代码时,要用两个循环嵌套,内循环进行数字的交换,外循环来确定内循环执行几次 } }  在算法中交换两个数值要先用一个变量存储其中一个值,然后在交换后,将变量赋值给另一个即可完成交换。 演示结果: 第1次排序后[1, 5, 3, 2, 6, 9] 第2次排序后[1, 3, 2, 5, 6, 9] 第3次排序后[1, 2, 3, 5, 6, 9] 第4次排序后[1, 2, 3, 演示结果: 第1次排序后[1, 5, 3, 2, 6, 9] 第2次排序后[1, 3, 2, 5, 6, 9] 第3次排序后[1, 2, 3, 5, 6, 9] 排序结束,最终排序为[1, 2,

    41510编辑于 2024-09-24
  • 来自专栏JavaEE

    排序算法 --- 希尔排序

    一、排序思想 之前说到插入排序,希尔排序就对其进行了一个优化,优化的思路是: 对待排序列进行分组,组数为gap = arr.length / 2; 对每一组进行插入排序,然后再进行分组,gap = gap / 2; 再对每一组进行插入排序,直到最后组数为1,再进行最后一次插入排序即可; ---- 欢迎大家关注我的公众号 javawebkf,目前正在慢慢地将简书文章搬到公众号,以后简书和公众号文章将同步更新 ,那么整个排序过程就完了。 刚才说了,希尔排序的主要思想就是分组,对每一组分别进行插入排序,那代码就简单了,就是这分组里面将之前插入排序的代码拷过来稍微改改就行了。 ,以前插入排序的代码是这样的: for(int i=1; i<arr.length; i++) { // 默认第一个是有序表,从第二个元素开始进行插入排序 int insertVal = arr

    91531发布于 2020-10-10
  • 来自专栏学习C/++

    【排序算法】希尔排序

    希尔排序( 缩小增量排序 ) 希尔排序是一种经典的排序算法,它通过多次插入排序的方式,以及逐步缩小增量的策略,实现对数据的高效排序,希尔排序法又称缩小增量法。 分组思想 希尔排序的核心思想在于将待排序的数据分成若干组,对每一组数据进行插入排序。这样做的好处是,一方面可以减少数据的比较次数和移动次数,另一方面可以利用已经部分有序的性质,加速排序的过程。 排序步骤 希尔排序的排序步骤可以分为以下几个阶段: 分组排序:初始时,根据设定的增量将数据分成若干组,对每组数据进行插入排序,使得每组数据都部分有序。 逐步缩小增量:在每一轮排序后,逐步减小增量的值,重新分组并进行插入排序,直到增量为1。 最后一次排序:当增量为1时,整个数组被视为一组,对整个数组进行插入排序,使得整个数组有序。 : 希尔排序是对直接插入排序的优化。

    68210编辑于 2024-03-30
  • 来自专栏琯琯博客

    排序算法-选择排序

    排序算法-选择排序 <?php /** * 选择排序. * * @param array $value 待排序数组 * * @return array */ function select_sort(&$value = []) { $length

    2K80发布于 2018-05-09
  • 来自专栏JavaEE

    排序算法 --- 计数排序

    前面说的那些排序算法,都是要通过比较来实现的。排序还能不通过比较来实现?是的,计数排序就是这么神奇。 一、排序思想 创建一个计数数组,利用数组下标来表示该元素,用数组下标对应的值来表示元素出现的次数。 案例: 假如待排序列arr如下: 5 7 4 8 3 5 最大元素是8,所以创建一个最大下标为8的数组: int[] count = new int[9]; 遍历待排序列,第一个是 也就是说,当值相同的情况下,无法保证排序后相同元素出现的顺序和排序前一致,这也就是我们说的不稳定排序。如何优化呢? 这样一来,就将计数排序变成稳定的了。 3. 计数排序的缺点: 从上面的分析可以知道,计数排序适合分布比较集中的数据,即最大值和最小值相差不多,如果相差特别多,就会很耗费空间。

    1.1K21发布于 2020-10-10
  • 【排序算法】—— 快速排序

    2.小区间优化 小区间优化指的是在快速排序算法中针对较小规模的子数组(或子问题)采用其他排序方法,而不是继续使用快速排序本身。 这种优化技术的目的是避免在小规模问题上快速排序的递归调用带来的额外开销,提高算法的整体效率。 这样可以避免递归深度过深,减少递归调用和分区操作的开销,从而提高整体排序算法的性能。 (2).切换到其他排序算法:在快速排序的递归过程中,当子数组大小小于设定的阈值时,停止快速排序的递归,转而使用其他排序算法完成剩余的排序工作。 小区间优化技术能有效降低快速排序在小规模数据上的不必要开销,提高整体排序算法的效率和性能。

    67110编辑于 2025-11-15
  • 来自专栏知识分享

    【排序算法】——选择排序

    排序算法在很多领域得到相当地重视,尤其是在大量数据的处理方面。一个优秀的算法可以节省大量的资源。 简介 所谓排序算法,即通过特定的算法因式将一组或多组数据按照既定模式进行重新排序。 本篇文章讲述的是排序算法中的选择排序,其中包含了两种排序算法,分别是直接选择排序和堆排序,下面将会一一为大家详细介绍。 1.直接选择排序 下面我们首先来看一看直接选择排序算法的动图演示: 看了上图我们可以得知,直接选择排序算法是首先从第1个位置开始对全部元素进行选择,选出全部元素中最小的给该位置 2.稳定性 在排序算法中,我们不光要关注算法的时空复杂度,还在看看算法的稳定性,什么是稳定性呢? 因此,我们说选择排序不是稳定的排序算法,它在计算过程中会破坏稳定性。

    44310编辑于 2025-05-31
  • 来自专栏程序猿~

    排序算法 - 快速排序

    public class QuickSort { public static void quickSort(int[] arr, int l, int r){ if(l >= r){ return; } int p = partition(arr, l, r); quickSort(arr, l, p - 1); quickSort(arr, p + 1, r); } pub

    1.2K30发布于 2021-02-04
领券