首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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

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

1.5K30

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

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

86210
您找到你想要的搜索结果了吗?
是的
没有找到

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

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

72520

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

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

92920

MapReduce之输出结果排序

前面的案例中我们介绍了统计出每个用户的上行流量,下行流量及总流量,现在我们想要将输出的结果按照总流量倒序排序。 ?...实现思路   MR程序在处理数据的过程中会对数据排序(map输出的kv对传输到reduce之前会排序),排序的依据是map输出的key。...所以我们如果要实现自己需要的排序规则,则可以考虑将排序因素放到key中,让key实现接口:WritableComparable,然后重写key的compareTo方法来指定比较规则 实现步骤 1.自定义...0:1); } } 5.输出结果 ? ? ?...成功倒序输出 本案例的目的有两个: 实现对输出结果排序我们可以在自定义对象的compareTo方法中指定 如果一次MapReduce任务获取不到我们需要的结果我们可以对输出的结果做多次MapReduce

2K10

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

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

57920

Js排序算法_js 排序算法

一、概念 快速排序算法由 C. A. R. Hoare 在 1960 年提出。...它的时间复杂度也是 O(nlogn),但它在时间复杂度为 O(nlogn) 级的几种排序算法中,大多数情况下效率更高,所以快速排序的应用非常广泛。...快速排序的一次划分算法从两头交替搜索,直到low和high重合,因此其时间 复杂度是O(n) ; 而整个快速排序算法的时间复杂度与划分的趟数有关。...这样,长度为n的数据表的快速排序需要经过n趟划分,使得整个排序算法的时间复杂度为O(n2)。 如果需要优化,那么我们希望每次区分的时候都取到中间数。...JavaScript实现五种排序算法 关于快速排序的不稳定性说明 JavaScript实现十大排序算法(附有更好理解的GIF动态图) 版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人

25.2K20

算法——排序算法

:arr={99,76,35,18,12} 第四次冒泡:排序结果:arr={99,76,35,18,12},至此冒泡排序结束 代码: 1 public static void BubbleSort(...--------- 第二趟排序: 原始数据: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交换 排序结果:2 3 5 6 8 7 ------------------------------------------------------- 第五趟排序: 原始数据:8 7(2、3、5、...6已经排好序了,不需要再排序了) 最小数据7,7和8交换 排序结果:2 3 5 6 7 8 排序完成 代码示例: 1 package com.alibaba; 2 3 import org.junit.jupiter.api.Test

60610

排序算法】希尔排序

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

5710

排序算法 --- 计数排序

前面说的那些排序算法,都是要通过比较来实现的。排序还能不通过比较来实现?是的,计数排序就是这么神奇。 一、排序思想 创建一个计数数组,利用数组下标来表示该元素,用数组下标对应的值来表示元素出现的次数。...也就是说,当值相同的情况下,无法保证排序后相同元素出现的顺序和排序前一致,这也就是我们说的不稳定排序。如何优化呢?...计数排序的缺点: 从上面的分析可以知道,计数排序适合分布比较集中的数据,即最大值和最小值相差不多,如果相差特别多,就会很耗费空间。...创建接收结果的数组 int[] result = new int[arr.length]; // 6....倒序遍历原数组,并且将结果存到result数组中 for (int i=arr.length-1; i>=0; i--) { result[count[arr[i] - min]

53921

排序算法 --- 希尔排序

一、排序思想 之前说到插入排序,希尔排序就对其进行了一个优化,优化的思路是: 对待排序列进行分组,组数为gap = arr.length / 2; 对每一组进行插入排序,然后再进行分组,gap = gap...[0 + gap]为一组,arr[1]和arr[1 + gap]为一组……第一次分组后的结果如下(数字后面带的符号相同的为同一组): 8* 9$ 1@ 7^ 2& 3*...5$ 4@ 6^ 0& 对这五组都进行插入排序结果就是: 3* 5$ 1@ 6^ 0& 8* 9$ 4@ 7^ 2& 对上面的序列再进行分组...,gap = gap / 2 = 5 / 2 = 2,再分成两组,arr[0]和arr[0+2]、arr[0+2+2]……为一组,分组结果就是: 3* 5$ 1* 6$ 0*...8$ 9* 4$ 7* 2$ 对这两组分别进行插入排序结果就是: 0* 2$ 1* 4$ 3* 5$ 7* 6$ 8*

47931

排序算法】堆排序

需要注意的是,堆排序仍然是对线性序列的排序,我们称这一算法为堆排序,是因为这一过程中,元素索引值之间的关系与完全二叉树非常类似。...化简得到:i<=(n-1)/2,由于结果为整型,1/2会丢失,所以i<=n/2,此即为计数器的初始值。 由于这里我们控制的是索引,从1开始,所以计数器控制条件为i>=0。...num) / sizeof(num[0]); //建树 for (int i = length/2; i >= 1; i--) { adjust(num, i, length); } //检验结果...在建堆的过程中,我们也无法保证最后的结果是有序的,只能保证根节点大于它的左右孩子,而无法保证左右孩子间有序。 交换指的是将目前排出的最大值与数组最后一个元素交换位置。...大顶堆的排序结果是从小到大排列,小顶堆的堆排序结果是从大到小排列。

14720

排序算法---选择排序

排序是我们学习算法过程中重要且基础的一环,例如对下面的排序问题,我们应该怎么做呢?...选择排序思想和实现思路 提到排序问题,很容易想到的思路就是找出来所有数据中最大(或最小)的元素,放在一个新列表的第一位,然后再在剩下的元素中找出最大(或最小)的元素,放在新列表的第二位,以此类推......这就是选择排序(selection sort)的算法思想。 上图就是选择排序算法思想,但一个算法的实现往往不能通过一个简单的思想就搞定(这就是思想与现实的距离,哈哈~)。...具体的实施步骤如下: 算法实现 接下来我们看一下其具体的算法实现: #include #include using namespace std; struct...cout.width(8); // 设置数据宽度 cout << student; } return 0; } 程序运行结果: ---排序前--- 张三 68

66910

排序算法-选择排序

算法简介 选择排序就是找到数组中最小元素将其和数组第一个元素交换位置,然后在剩下的元素中找到最小元素并将其与数组第二个元素进行交换,以此类推,直至整个数组排序结束。...算法描述 找到数组中最小元素并将其和数组第一个元素交换位置 在剩下的元素中找到最小元素并将其与数组第二个元素交换,直至整个数组排序 ?...由于每次都是选取未排序序列R中的最小元素 a 与 R 中的第一个元素交换,很可能破坏了元素间的相对位置,因此选择排序是不稳定的。...排序算法 平均时间复杂度 最好情况 最坏情况 空间复杂度 稳定性 选择排序 \(O(n^2)\) \(O(n^2)\) \(O(n^2)\) \(O(1)\) 不稳定

1.6K40

排序算法-快速排序

1.快速排序(递归) 快速排序是 Hoare 于 1962 年提出的一种二叉树结构的交换排序方法,其基本思想为: 任取待排序元素序列中 的某元素作为基准值,按照该排序码将待排序集合分割成两子序列,左子序列中所有元素均小于基准值...cur的作用就是和prev拉开距离,然后将大于a[keyi]的值放到右边的部分,最后交换a[keyi]和a[prev],就完成了部分排序。...,因为插入排序最坏的情况就是要插入的数都比前面的数小,插入排序在小区间里面比较不错的一种排序算法,在快速排序里面使用插入排序可以提高很多的效率。...(非递归) 非递归的快速排序可以借助一个栈来实现,先入右边的值,再入左边的值,然后每次取值都是先取栈顶,也就是左边的值,然后再进行部分排序,直到返回的keyi-1=left,就代表着左边排序完成,右边返回的...keyi+1=right,代表右边的部分排序完成。

10910

排序算法-冒泡排序

算法简介 冒泡排序(Bubble Sort)是一种典型的交换排序算法,持续比较相邻元素,大的挪到后面,因此大的会逐步往后挪,故称之为冒泡。 算法描述 比较相邻的元素。...冒泡排序排序过程中,元素两两交换时,相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。...排序算法 平均时间复杂度 最好情况 最坏情况 空间复杂度 稳定性 冒泡排序 \(O(n^2)\) \(O(n)\) \(O(n^2)\) \(O(1)\) 稳定 冒泡排序优化(优化外层循环) 若在某一趟排序中未发现位置的交换...为此,在下面给出的算法中,引入一个标签flag,在每趟排序开始前,先将其置为false。若排序过程中发生了交换,则将其置为true。...各趟排序结束时检查flag,若未曾发生过交换则终止算法,不再进行下一趟排序

1K70

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券