十大排序算法
婷婷T
Bug层出不穷,人生永无止境
展开
-
计数排序
计数排序 一、思路:开辟新的空间,空间大小为max(source),扫描source,将value作为辅助空间的下标,用辅助空间的改位置元素记录value的个数。一句话:用辅助数组对数组中出现的数字计数,**元素转下标,下标转元素。** 假设元素均大于等于0,依此扫描原数组,将元素值k记录在辅助数组的k位上 依此扫描辅助数组,如果为1,将其插入目标数组的空白处。 二、过程:如9 7 5 3 1 ...原创 2020-02-03 19:38:47 · 88 阅读 · 0 评论 -
希尔排序
一、希尔排序是插入排序的一种。一趟一增量,用增量来分组,组内执行插入排序。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。 二、过程:如序列 9 8 7 6 5 4 3 2 1 确定一个增量序列,如 4(length/2) 2 1 ,从大到小使用增量 使用第一个增量,将序列划分为若干个子序列,下标组合为0-4-8,1-5,2-6,3-...原创 2020-02-03 19:30:34 · 81 阅读 · 0 评论 -
选择排序
一、核心思路:定第一个最大,比其大着覆盖,比其小着交换 二、过程:第一趟,选择所有元素中最小的,和第一位交换 第二趟,选择第二位及以后所有元素中最小的,和第二位交换 三、时间复杂度:O(n²) 四、空间复杂度:O(1) 五、原址排序 六、稳定性:相对位置发生了变化,因此不稳定 import java.util.Arrays; public class SelectSort...原创 2020-02-03 19:24:54 · 71 阅读 · 0 评论 -
归并排序
一、归并排序(Merge Sort) >归并排序算法完全依照了分治模式 -分解:将n个元素分成各含n/2个元素的子序列; -解决:对两个子序列递归地排序; -合并:合并两个已排序的子序列以得到排序结果 二、 思路:将数组分为左右两个子数组,递归调用归并进行排序。分别排序完成后,使用辅助的合并函数将两个有序的子数组合并成一个整体...原创 2020-02-03 18:56:46 · 87 阅读 · 0 评论 -
快速排序
一、快速排序算法:划分是问题的关键。 1.分解:将数组划分为两个数组,使得一个数居中,左侧都小于等于他,右侧都大于等于他。其中计算中间数下标也是划分过程的一部分。 2.解决:通过递归调用快速排序,对于子数组(左右数组)进行排序。 3.合并:因为子数组都是原址排序的,所以整体数组已经有序。 伪代码: QuickSort(A,p,r) if(p<...原创 2020-02-03 18:50:18 · 172 阅读 · 0 评论 -
冒泡排序
一、核心思想:两两交换,小的/大的往前。 二、过程: 第一趟,通过两两交换的手段,将最大/小元素顶到最末端 第二趟,…………………………………………,将次大/小元素顶到倒数第二个位置 …… 三、时间复杂度:O(n(n-1)/2) 四、空间复杂度:O(1) 五、原址排序 六、稳定性:有相同元素,排序前和排序后相对位置不会变化,稳定。 七、代码: import java.util.Ar...原创 2020-02-03 15:10:21 · 112 阅读 · 0 评论 -
插入排序
插入排序 一、核心思想:从数组第二个元素开始,该元素如果大于前元素则可继续下一个元素; 如果该元素小于前元素,则往前插入,直到没有小于该元素为止。 二、过程: 标题 三、时间复杂度:O(n²)=1+2+3+...+n-1 四、空间复杂度:O(1) 五、 原址排序 六、稳定性:由于是从后往前,后续元素如果存在前面相等的,无法越过,相对位置不会发生变化。 七、一般解法: import ...原创 2020-02-03 13:16:54 · 396 阅读 · 0 评论