排序算法
你始终一个人
雨纷纷,旧故里草木深
我听闻,你始终一个人
展开
-
归并排序java实现
算法思想归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。归并排序是一种稳定的排序方法。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。算法步骤1.分为两组,分别对两组排序,在对子数组排序的时候可能又要分而治之,当数组长度为1时不再分,2.合并,两个子数组,盗图解释一下。。...原创 2019-07-23 16:55:05 · 112 阅读 · 0 评论 -
计数排序
算法描述1.根据待排序集合中最大元素和最小元素的差值范围,申请额外空间;2.遍历待排序集合,将每一个元素出现的次数记录到元素值对应的额外空间内;3.对额外空间内数据进行计算,得出每一个元素的正确位置;代码import java.util.Arrays;public class CountSort { public static void main(String[] args)...原创 2019-07-23 18:50:09 · 82 阅读 · 0 评论 -
插入排序java实现
思想通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。算法步骤1.从第一个元素开始,该元素可以认为已经被排序;2.取出下一个元素,在已经排序的元素序列中从后向前扫描;3.如果该元素(已排序...原创 2019-07-22 10:22:44 · 88 阅读 · 0 评论 -
希尔排序java实现
思想shell排序是对直接插入排序的改进,我们已经知道,直接插入排序的复杂度受本身序列的有序程度影响,当数组已经有序,则每次查找插入的位置时间O(1),总的复杂度O(n),而当逆序对较多时,或者全部全部逆序时,复杂度为O(n^2)。所以希尔排序的思想是先优化子序列的有序程度,慢慢增大序列长度,最后对整个数组排序。步骤1、确定增量序列2、按照增量序列分组,对每组进行直接插入排序(以第一个子序...原创 2019-07-22 13:07:53 · 130 阅读 · 0 评论 -
简单选择排序
算法思想简单选择排序跟冒泡和直接插入一样简单的排序算法。从待排序列中找一个最小的,放到已经排序的末尾。直接看代码代码实现public class SelectionSort { public static void main(String[] args) { int[] a={100,50,9,3, 4, 10, 3, 6, 7, 4, 1, 2}; ...原创 2019-07-22 15:00:48 · 73 阅读 · 0 评论 -
堆排序java实现
网上很多堆排序都有问题,我写的这个我测试是没问题的,如果有问题请指出!算法思想堆排序是利用堆这个数据结构,堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。堆这个等我写完排序再看。算法步骤1.将初始待排序关键字序列(R1,R2….Rn)构建成大顶堆,此堆为初始的无序区;2.将堆顶元素R[1]与最后一个元素R[n]交换,此时得到新的无...原创 2019-07-22 19:25:04 · 109 阅读 · 0 评论 -
快速排序
快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。算法描述:选择基准重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数列排序。代码实现...原创 2019-07-19 10:33:56 · 85 阅读 · 0 评论 -
冒泡排序
原理每次比较两个相邻的元素,将较大的元素交换至右端。步骤每次冒泡排序操作都会将相邻的两个元素进行比较,看是否满足大小关系要求,如果不满足,就交换这两个相邻元素的次序,一次冒泡至少让一个元素移动到它应该排列的位置,重复N次,就完成了冒泡排序。代码实现(java)import java.util.Scanner;public class bubbleSort { public s...原创 2019-07-19 18:05:44 · 365 阅读 · 0 评论