
八大排序
qq_41335802
这个作者很懒,什么都没留下…
展开
-
八大排序-归并排序
归并排序就是递归得将原始数组递归对半分隔,直到不能再分(只剩下一个元素)后,开始从最小的数组向上归并排序。 将一个数组拆分为两个,从中间点拆开,通过递归操作来实现一层一层拆分。 从左右数组中选择小的元素放入到临时空间,并移动下标到下一位置。 重复步骤2直到某一下标达到尾部。 将另一序列剩下的所有元素依次放入临时空间。 将临时空间的数据依次放入原数据数组。 //分 public static void mergeSort(int[] a, int low, int high) { //首原创 2022-01-09 19:18:54 · 64 阅读 · 0 评论 -
八大排序-快速排序
快速排序:将数组第一个数当做基准数,定义两个指针分别指向待排序数组的左右两段,移动右边指针找到比基准数小的数停止,移动左边指针找到比基准数大的数停止,之后两个指针的值互换,继续寻找至两个指针重合,重合的数值和基准数互换。原第一个数到达正确位置,其左右进行递归快排。 public static void quickSort(int[] arr,int left,int right){ if(left >= right){ return; }原创 2022-01-09 19:16:05 · 455 阅读 · 0 评论 -
八大排序-基数排序
基数排序:将整数按位切割成不同的数字,然后按每个位数分别比较。 具体做法是:将所有待比较数值统一为同样的位数长度,数位较短的数前边补零。然后,从最低位开始,依次进行一次排序,这样从最低位排序一直到最高位排序完成后,就变成一个有序数列。 //基数排序方法 public static void sort(int[] arr) { //得到数组当中最大数的位数 int max = arr[0]; //假设第一个数就是最大数 for (int i = 0; i < arr..原创 2022-01-09 19:14:33 · 116 阅读 · 0 评论 -
八大排序-堆排序
堆排序:完全二叉树:从上到下,从左到右依次平铺满的二叉树。 大(小)顶堆:完全二叉树的每个节点的值都要大于(小于)其左右子树的顶点。 应用中利用完全二叉树的某些特性而在数组中构建大小顶堆。N[i]的左子节点为N[2i+1],右子节点为N[2i+2],其父节点为N[(i-1)/2] 调整指 将换位后的父子节点的子节点的值往堆底移动。 /** * 创建堆, * @param arr 待排序列 */ private static void he.原创 2022-01-09 19:11:45 · 63 阅读 · 0 评论 -
八大排序-希尔排序
希尔排序(缩小增量排序)(O(nlogn)):根据数组长度的一般来确定每一组的步长,每组内的数据进行插入排序。步长再设置为原来步长的一半,在进行组内插入排序。直至步长缩小为一。缩小为一后,从第一位开始左右比较小左大右尽心微调一遍。 public static void shellSort(int[] arr){ for(int gap = arr.length /2;gap > 0;gap /= 2){ for (int i = gap ;i < a原创 2022-01-09 19:08:14 · 67 阅读 · 0 评论 -
八大排序-插入排序
插入排序(O(n^2)):认定待排序的数组当中的第一个数为已经排序好的的数组,在遍历的过程中将待排序的数组插入到数组中。(数组的下标是连续的内存地址,只能逐渐改变该位置的数值,使整个数组逐渐移位。) public static void Sort(int[] arr) { for (int i = 1; i < arr.length; i++) { //将当前数据插入到已经有序的数字当中(这里需要倒着往前找) for ( in原创 2022-01-09 18:59:28 · 146 阅读 · 0 评论 -
八大排序-选择排序
选择排序:规定最小指针为第一项,依次与数组后几位比较,将小数放入指针,比较完数组,将指针与第一位交换数值,接着将第二位赋值给指针与后几位比较,重复此操作,将数组第二小放入第二位,重复操作,实现从小到大排序。 public class Insert { public static void main(String[] args) { int[] arr = {8,65,41,28,6,1,4,5,32,9,10}; System.out.println("排序前")原创 2022-01-09 18:54:48 · 258 阅读 · 0 评论 -
八大排序-冒泡排序
冒泡排序:在数组中从第一项开始与其右一位比较大小,大者移至次序较大处,接着第二项与其右一位相比,重复比较大小,大者移至靠右位,如此至最后一项,可使数组最大的数移至最右,数组前几位重复操作一一将最大值移至右位,实现从小到大排序。 总结来说,升序排序当中每一轮比较会把最大的数沉到最底(这里以从小到大为例),所有相互比较的次数每一轮会比前一轮少一次。 public class BubbleSort { static int[] arr = new int[] {8,65,41,28,6,1,4,5,3原创 2022-01-09 18:52:30 · 266 阅读 · 0 评论