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

经典排序之选择排序

​ 选择排序 排序含义 了解一个知识,必须要从其含义开始。...什么是选择排序呢,用一个例子来解释:仍然是同学排队问题 假设有A、B、C、D四位同学,该四位同学是身高大小情况为【B>A>D>C】,且目前的顺序为【A、B、C、D】 接下来用选择排序的思维为他们设计排序方法...排序图例 身高顺序以及排队成员 开始排序 第一轮 ​ 此时排序顺序为 第二轮排序 此时的排序顺序 第三轮比较 发现此时的A小于B,所以不发生交换。...此时的排序顺序为 此时排序结束 代码实现 声明一个待排序的数组 var arr=[12,53,62,34,8,28,42,75]; 排序代码 for(var i=0;i<arr.length-1...总结 顺序排序、插入排序、选择排序等等虽然都是针对一种情况来解释,但是通过解决一个问题提供多个解决方法方面来看,不同的算法有这不同的优势。

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

经典排序之 快速排序

Author: bakari  Date: 2012.7.21 排序算法有很多种,每一种在不同的情况下都占有一席之地。关于排序算法我分“经典排序之”系列分别述之。本篇为快排。...运用一个好的排序算法是衡量一个软件优劣的关键因素,下面我就此总结一下快排的几种经典的情况: 我是用C++的类写的,存储结构为vector(这个无所谓),本来一个通用的快排函数应该是QuickSort(str...**************************************************** 2 * Author: bakari Date :2012.7.21 3 * 快速排序...这儿是我前两天看左飞的书时不小心看到的,个人觉得还蛮经典的。让我思维一下子开阔起来。 先说明这个快排的概念,先以最右边的s为标准,分为三部分,小于s的部分,大于s 的部分和未处理的。...} 24 } 25 Swap(i + 1,right); 26 return (i + 1); 27 28 } OK,目前我知道的快排就有这三种,熟练掌握着三种排序

526100

经典排序算法

经典排序算法 一、介绍 作为入门级基本算法,徒手写出是基本要求,下面列取几种基本的算法实现。...希尔排序则是,通过步长,将元素化为同一组,让他们在同组中进行插入排序 定义步长,初始步长为n/2,最后一次步长则为1 同插入排序一样,选择第二个元素,向前遍历找到他自己的位置。...希尔排序这边同理,从步长位置开始,往前遍历步长个位置,找到他自己元素的位置 直到步长为1,进行最后一次插入逻辑后,完成排序 2.5)选择排序 package com.banmoon.algorithm.order...如果有,覆盖下标 当步骤2走完,当前下标元素和最小下标元素进行替换 重复步骤1-3,玩成排序 选择排序和冒泡排序的遍历有点像,但不同出现在选择是记录最小的小标,最后开始替换;冒泡则是每次比较后...2.8)堆排序排序和上面的几种排序都不太一样,它是基于顺序存储的二叉树进行的一种排序,故此新开了一章进行讲解。

1.3K30

经典排序之 归并排序

Author: bakari  Date: 2012.7.30 排序算法有很多种,每一种在不同的情况下都占有一席之地。关于排序算法我分“经典排序之”系列分别述之。本篇为归并排序。...归并排序是分治法最好的应用,先将一个大的问题分解成小的问题,然后着重去解决小的问题,小问题一解决大问题也就自然而然地解决了。...**************************************************** 2 * Author: bakari Date: 2012.7.30 3 * 合并排序...4 * 合并排序的宗旨是将两个已经排好序的序列重新归并为一个序列 5 * 算法的关键点就在于确定合并的基数,即每一次合并元素的数量 6 ************************...len;++i) 8 MegerList[i] = ReplaceList[i]; 9 ix = ix * 2; 10 } 11 12 } 下面就是排序的算法

49990

经典排序算法(一)冒泡排序

排序算法  尊重劳动成果,请访问CSDN著者原文链接 http://blog.csdn.net/zixiao217/article/details/51960532 排序,一定程度上就是比较,比较是过程...(貌似是唯一手段),再决定是否交换,结果就是排序。  ...true : false; } ##决定是否交换  我们要排序,想将大的数放到后面,那么首先比较两个数的大小,如果第一个数大,则交换两个数(把大的换到后面去),否则不交换。...*/ if(greaterThan(age_gy, age_st )){ temp = age_gy; age_gy = age_st; age_st = temp; } } ##冒泡排序...###冒泡排序的思路  给定一组数据N个数:  从第一个数开始起,依次和它之后的那个数比较,如果前面的数大于后面的数,就交换它们在序列中的位置,直到最后一个数,这样就得到最大的数放到这组数的末尾

8120

经典排序算法(二)选择排序

选择排序原理 选择排序是一种简单排序算法。这是一个基于位置比较的算法,通常实现是左边是已经排好序的元素列表,右边是待排序的元素。当然,一开始的时候,我们认为都是未经排序的。...选择排序的精髓:与冒泡排序不同,选择排序是第N趟排序先确定最小元素的位置,然后和第N个元素交换位置。主要特点是每一趟选择一个最小值的索引作为梅一堂最后交换的位置。...至此,选择排序算法结束,选择排序算法复杂度O(N),比较次数N-1、N-2、…、1,交换次数N。...后面的排序过程以此类推,以下是整个排序过程: 最后展示完整的选择排序代码: package org.byron4j.sort; /** * * @author Byron.Y.Y *...@version 1.0 * Java-选择排序-以整形数组为例 */ public class SelectionSort { /** * 注意:该方法仅仅展示选择排序的过程

36220

经典算法——冒泡排序

稳定性 算法稳定性指的是在一组待排序记录中,如果存在任意两个相等的记录R和S,且在待排序记录中R在S前,如果在排序后R依然在S前,即它们的前后位置在排序前后不发生改变,则称为排序算法为稳定的。...常见排序算法的稳定性:堆排序、快速排序、希尔排序、直接选择排序是不稳定的排序算法,而基数排序、冒泡排序、直接插入排序、折半插入排序、归并排序是稳定的排序算法。 3....冒泡排序 冒泡排序,也被称为气泡排序或泡沫排序。 冒泡排序是一种较简单的排序算法。它会遍历若干次要排序的数列,每次遍历时,它都会从前往后依次的比较相邻两个数的大小;如果前者比后者大,则交换它们的位置。...因此,冒泡排序的时间复杂度是O(n2)。 空间复杂度 冒泡排序的辅助变量空间仅仅是一个临时变量,并且不会随着排序规模的扩大而进行改变,所以空间复杂度为O(1)。...稳定性 冒泡排序是针对相邻的元素且存在相对大小时才交换元素位置,对于大小相等的相邻元素,不会交换两者位置,所以冒泡排序是稳定的。

51510

经典排序算法(三)插入排序

插入排序 插入排序,也是一种基于位置比较交换的排序算法。在排序过程中,它总是维持着一个有序的子列表。例如,一个数组的较低索引部分维持着有序。排序的时候,新元素在之前有序的部分中找好位置”插入”进去。...故名,插入排序。 数组被频繁的检索、为排序的项将会移动并插入到已排好序的子列表中,这些都是在一个数组中完成的。...插入排序不适合数据量很大的数组排序,它的平均、最坏复杂度为O(N^2),N是数组的元素个数。...插入排序工作流程 我们以一个未排序的数组为例: 插入排序首先会比较开始的两个元素: 发现14和33已经是自然序的(上升排序)了。...Step 2 − 获取下一个元素 Step 3 − 和已经排序列表中的所有元素比较 Step 4 − 移动有序列表中比当前待排序元素的值要大的所有元素 Step 5 − 插入当前待排序元素 Step 6

18120

经典算法巡礼(七) -- 排序之堆排序

= true { break } this.exch(idx, child) idx = child } } 五、堆排序 ------------ 堆排序可以分为两个阶段...: 堆的构造阶段 下沉排序阶段 构造一个堆,可以用以下两种方法进行。...,在sink()函数中,比较操作最多进行2logN次,所以排序整个数组最多需要N*2logN次比较操作,因此堆排序的时间复杂度为O(NlogN),所以可以用于大规模数据的排序。...堆排序是能够同时最优地利用空间和时间的方法,即使在最坏的情况下,它也能保证使用~2NlogN次比较和恒定的额外空间。但现代系统的许多应用很少使用它,因为堆排序无法有效利用缓存。...数组元素很少和相邻的其他元素进行比较,因此缓存未命中的次数要远远高于大多数比较都在相邻元素间进行的算法,如快速排序,归并排序,甚至是希尔排序(希尔排序算是没有多少相信元素间的比较的算法了)。

46320

经典排序算法(1)——冒泡排序算法详解

冒泡排序(Bubble Sort)是一种典型的交换排序算法,通过交换数据元素的位置进行排序。...鸡尾酒排序又叫定向冒泡排序,搅拌排序、来回排序等,是冒泡排序的一种变形。...此算法与冒泡排序的不同处在于排序时是以双向在序列中进行排序。 鸡尾酒排序在于排序过程是先从低到高,然后从高到低;而冒泡排序则仅从低到高去比较序列里的每个元素。...以序列(2,3,4,5,1)为例,鸡尾酒排序只需要从低到高,然后从高到低就可以完成排序,但如果使用冒泡排序则需要四次。 但是在乱数序列的状态下,鸡尾酒排序与冒泡排序的效率都很差劲。...(3)稳定性 冒泡排序排序过程中,元素两两交换时,相同元素的前后顺序并没有改变,所以冒泡排序是一种稳定排序算法。

35860

java冒泡排序经典代码_java冒泡排序

经典算法——冒泡排序(Bubble Sort) 一、示例代码(伸手党看这里) 1.示例一 importjava.util.Arrays;public classBubbleSort {public static...int temp; /*临时变量,交换数据时使用*/ int length =arr.length;for(int p = length-1; p > 0; p–){ /*需要进行N-1(数组长度减一)趟排序...*/ for(int i = 0; i arr[i+1]){//进行位置交换 temp =arr[i]; arr[i]= arr[i+1...在使用冒泡排序的时候有可能会遇到这样一种情况:某一趟排序从头到尾,数组中的数字都没有发生位置交换。 那么上面这种情况说明了什么呢?说明了在经过上一趟的排序后,整个数组就已经被排好序了。...这么说的话原来计划的N-1趟排序我们是不是可以不用跑满了?是的!

73620

经典算法——直接选择排序

选择排序 3.1 代码实现 3.2 算法效率 1. 什么是算法? 任何被明确定义的计算过程都可以称作 算法 ,它将某个值或一组值作为输入,并产生某个值或一组值作为输出。...比如直接插入排序的时间复杂度是O(n^2),空间复杂度是O(1) 。 3....选择排序 选择排序的核心思想是:每一趟从无序区中选出关键字最小的元素,按顺序放在有序区的最后(生成新的有序区,无序区元素个数减1),直到全部排完为止。...直接选择排序 也称简单选择排序,过程是每次从无序区中找出最小的元素,按顺序放在有序区的最后(刚开始有序区的元素为零) 输入 n个数的序列,通常存放在数组中,可以是任何顺序。...算法流程 如果使用直接选择排序对元素个数为n的序列进行排序,需要进行n-1趟排序

25810

经典算法巡礼(二) -- 排序之选择排序

选择排序,如冒泡排序一样,从名字中即可大概猜测其排序的原理。其工作原理就是从未排序的数组中选出最大(小)的元素,将其放置至数组的首(尾)部,重复此过程直至没有未排序的子数组。...观察选择排序的代码实现,明显她也是时间复杂度为O(N^2)的排序算法。...与冒泡排序不同的是,虽然两种排序算法的比较次数是相同的,但是其元素交换操作数目并不是相同的。...选择排序的交换操作最多为N次,而冒泡排序的交换操作却与数组中不满足顺序的元素对数量相同,即与被排序数组相关,在最差情况下,其次数与比较次数相同,即N^2。...虽然选择排序在元素交换方面比冒泡排序具有一定的优势,但是其时间复杂度依然是万恶的平方级别的,即O(N^2),所以其依然只适用于小型数组的排序,不能满足大量数据的排序

42610
领券