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

java选择排序算法

/** 选择排序:执行完一次内for循环后最小一个数放在了数组最前面。 * 每一趟从待排序数据元素中选出最小(或最大)一个元素,顺序放在已排好序数列最后,直到全部待排序数据元素排完。.../ public class SelectSort { /** 排序算法实现,对数组中指定元素进行排序 * @param array 待排序数组 @param from 从哪里开始排序 @param...end 排到哪里 @param c 比较器 */ public void select(Integer[] array) { int minIndex;// 最小索引 /* 循环整个数组(其实这里上界为...array.length - 1 即可,因为当 i= array.length-1 时,最后一个元素就已是最大了,如果为array.length时,内层循环将不再循环),每轮假设 第一个元素为最小元素...,则让让最小元素与第一 个元素交换 */ for (int i = 0; i < array.length; i++) { minIndex = i;// 假设每轮第一个元素为最小元素 // 从假设最小元素下一元素开始循环

72100

排序算法选择排序-java

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

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

Java常见排序算法详解——选择排序

转载请注明出处:https://www.jianshu.com/p/43981d777731 选择排序Simple Selection Sort 概念: 是一种简单直观排序算法。...例如我们有一个数组,我们如果需要把较小元素排在前面,把大元素排在后面。 从数组当中,选择出最小那个元素放在第一个位置。 如果没有比当前还小元素,那么就在当前位置不变。...选择排序主要优点与数据移动有关。如果某个元素位于正确最终位置上,则它不会被移动。...选择排序每次交换一对元素,它们当中至少有一个将被移到其最终位置上,因此对n个元素序列进行排序总共进行至多n-1次交换。在所有的完全依靠交换去移动元素排序方法中,选择排序属于非常好一种。...: 冒泡排序 代码: Java和Kotlin代码我均放在了GitHub上,欢迎Star!

60000

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

/** * 排序算法-选择排序 * 选择排序(Selection Sort)算法也是比较简单排序算法,其思路比较直观。选择排序算法在每一步中选取最小值来重新排列,从而达到排序目的。...* 选择排序算法通过选择和交换来实现排序,其排序流程如下: * (1)首先从原始数组中选择最小1个数据,将其和位于第1个位置数据交换。...* (2)接着从剩下n-1个数据中选择次小1个数据,将其和第2个位置数据交换。 * (3)然后不断重复上述过程,直到最后两个数据完成交换。至此,便完成了对原始数组从小到大排序。...* * 选择排序算法在对n个数据进行排序时,无论原数据有无顺序,都需要进行n-1步中间排序。 * 这种排序方法思路很简单直观,但是缺点是执行步骤稍长,效率不高。...*/ import java.util.*; public class SelectionSort { public static void main(String[] args) {

1.5K30

排序算法Java代码实现(一)—— 选择排序

本片分为两部分代码: 常用方法封装 排序算法里需要频繁使用 交换数组中两数位置 操作,另外,为了方便我打印数组查看结果,我封装一个 ArrayBase.java基类,用来实现swap...方法和printArray方法; 选择排序算法 (一)ArrayBase.java /** * */ package com.cherish.SortingAlgorithm; /** * @...System.out.print(array[i] + "\t"); } System.out.println(); } } (二)选择排序算法...再从数组剩下元素中选择出最小元素,将它与数组第二个元素交换位置。 不断进行这样操作,直到将整个数组排序。...* 再从数组剩下元素中选择出最小元素,将它与数组第二个元素交换位置。 * 不断进行这样操作,直到将整个数组排序

69340

排序算法---选择排序

排序是我们学习算法过程中重要且基础一环,例如对下面的排序问题,我们应该怎么做呢?...选择排序思想和实现思路 提到排序问题,很容易想到思路就是找出来所有数据中最大(或最小)元素,放在一个新列表第一位,然后再在剩下元素中找出最大(或最小)元素,放在新列表第二位,以此类推......这就是选择排序(selection sort)算法思想。 上图就是选择排序算法思想,但一个算法实现往往不能通过一个简单思想就搞定(这就是思想与现实距离,哈哈~)。...选择算法实现并不会新建一个空白列表(因为这样太奢侈了),而是直接在原列表上进行操作:首先先从列表中找出最大(或者最小)元素,将其与列表中第一个元素互换位置,然后再从剩余元素中挑选出最大(或者最小)...具体实施步骤如下: 算法实现 接下来我们看一下其具体算法实现: #include #include using namespace std; struct

65710

排序算法-选择排序

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

1.6K40

算法渣-排序-选择排序

没有一身好内功,招式再多都是空;算法绝对是防身必备,面试时更是不可或缺;跟着算法渣一起从零学算法 定义 选择排序(Selection sort)是一种简单直观排序算法。...以此类推,直到全部待排序数据元素排完。 选择排序是不稳定排序方法。...算法 n个记录文件直接选择排序可经过n-1趟直接选择排序得到有序结果: 初始状态:无序区为R[1..n],有序区为空 第1趟排序 在无序区R[1..n]中选出关键字最小记录R[k],将它与无序区第...O(n);而选择排序不论如何,永远都是O(n^2) 插入排序是边读边排,每当读入一个新数时,目前数组一定是排好序。...而选择排序不同,它必须是读完所有的数据之后才能开始排序。 那么选择排序缺点就是,万一数据量很大,比方说一百万个,光读就慢了,还要排序,那就更慢了。

76320

选择排序算法

冒泡排序算法算法与数据结构中最基础排序算法。学会这个算法是有必要,在2010年左右时候,很多时候面试都会冒泡排序算法。那时候IT行业没现在这么卷,大部分都考察一下冒泡排序就OK了。...现在去面试不问个leetcodehard难度级别题都不过瘾。那现在有必须在学习冒泡排序吗?当然有必要,基础算法必须掌握,体现你技术热情,对走技术路线是有绝对帮助。...冒泡排序就是排队一样,矮排前面,高排后面。  刚开始是乱序,那就从第一个开始调整,把最高排到后面。排完这个之后,这个位置就被占用。 那再从第一个开始,再找出一个最高放在倒数第二个位置。...发现没有,每个最高放在最后,然后缩小数组范围,再找出一个高放在最后。 关键点:  每次都从第一个开始,写代码时候要注意。 一趟比较后,最后那个位置放最大数。...冒泡排序是稳定排序, 时间复杂度是o(n^2) 看一个简单例子: 5, 3, 2, 1 一趟冒泡如何进行 第一次比较 :5,  3, 2, 1 ;5和3需要调换位置 :  3,  5, 2, 1

77630

排序算法-选择排序详解

选择排序(Selection sort)是一种简单直观排序算法。它工作原理如下。...首先在未排序序列中找到最小(大)元素,存放到排序序列起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列末尾。以此类推,直到所有元素均排序完毕。...[], int len); //排序函数 void swap(int *a, int *b) { int temp = *a; *a = *b; *b = temp; } void...temp = $arr[$min]; $arr[$min] = $arr[$i] ; $arr[$i] = $temp; } var_dump($arr); 循环过程 循环过程其实最左边数一直和最右边数比较...,把最小值移到左边来; 第1趟比较:拿第1个元素依次和它后面的每个元素进行比较,如果第1个元素大于后面某个元素,交换它们,经过第1趟比较,数组中最小元素被选出,它被排在第一位; 第2趟比较:拿第2个元素依次和它后面的每个元素进行比较

63220

java五大排序算法选择排序

一.选择排序介绍 选出最小一个数与第一个位置数交换 二.选择排序原理分析 第1趟比较:拿第1个元素依次和它后面的每个元素进行比较,如果第1个元素大于后面某个元素,交换它们,经过第1趟比较,数组中最小元素被选出...第n-1趟比较:第n-1个元素和第n个元素作比较,如果第n-1个元素大于第n个元素,交换它们 三.选择排序代码实现 public static void selectionSort(int[] nums...swap(int[] arr, int i, int j) { int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } 四.选择排序优化...} // 交换两个数 temp = numbers[i]; numbers[i] = numbers[k]; numbers[k] = temp; } } 五.选择排序时间复杂度...时间复杂度:O(n²) 空间复杂度:O(1),只需要一个附加程序单元用于交换 稳定性:选择排序是不稳定排序算法,因为无法保证值相等元素相对位置不变,例如 [3, 4, 3, 1, 5]这个数组

19230

排序算法(二):选择排序

选择排序算法维护一个待排序集合和一个已排序集合,每轮迭代,从待排序集合中选择一个最小(最大)元素,添加到已排序集合中,通过多次迭代,最终完成排序。...选择排序与上一章 冒泡排序 很相似,两者都维护了待排序集合和已排序集合,每次迭代结束都会产生一个已排序元素。...] 已排序集合:[] 初始状态为: 根据算法过程: 步骤一, 初始值设为 0,指向元素 6,从下标为 1 元素开始,比较 指向值 和 3,比较大小后,选择下一个元素,比较 指向值...算法分析 在每一轮排序过程中,选择出极值后,是通过直接交换元素位置方式生成已排序元素,所以选择排序是一种非稳定排序。...算法执行过程中,不需要申请额外序列空间来保存临时元素,属于原地排序方式,所以算法空间复杂度为 。

85410

直接选择排序算法

直接选择排序算法思想 无序数组a[0…n-1],第一次从a[0]~a[n-1]中选取最小值,与a[0]交换,第二次从a[1]~a[n-1]中选取最小值,与a[1]交换,…....,第n-1次从a[n-2]~a[n-1]中选取最小值,与a[n-2]交换,总共通过n-1次,得到一个按关键字从小到大排列有序序列· 直接选择排序算法过程如下: 给定n=7,数组a中7个元素为[8,3,2,1,7,4,6...---- 在直接选择排序中,共需要进行n-1次选择和交换,每次选择需要进行 n-i 次比较 (1<=i<=n-1),而每次交换最多需要3次移动,因此,总比较次数C=(n*n - n)/2,时间复杂度O...直接选择排序为原地排序,空间复杂度O(1)。直接选择排序不是稳定排序算法。...---- 算法实现 直接选择排序算法伪代码 //直接排序 SELECTION_SORT(A) { for i=1 to n-1 min=i for j=i+1 to n

98720

浅析选择排序算法

选择排序(Selection Sort) 一、算法描述 在一个长度为 N 无序数组中,第一次遍历 n 个数找到最大和最后一个数交换。...[1 2 3 4 7 9] 第六趟:最后只剩一位数字我们就不用进行排序了,这样我们就对整个数组按照从小到大顺序进行排序了。...最后排序为 [1 2 3 4 7 9] 二、算法实现 #include int findMaxPos(int arr[], int n){ int max = arr[0];...平均时间复杂度:O(n2) 空间复杂度:O(1) 稳定性:不稳定(例如序列9 8 5 2 5,我们知道第一遍选择第1个元素9会和5交换,那么原序列中2个5相对前后顺序就被破坏了,所以选择排序不是一个稳定排序算法...) 四、适用场景 选择排序适用于数据量很小排序场景,因为选择实现方式较为简单。

74910
领券