排序
文章平均质量分 53
zhao_miao
冲鸭
展开
-
快速排序算法的递归实现(Hoare版本、挖坑法、前后指针)
快速排序的思想: 快速排序是Hoare于1962年提出的一种二叉树结构的交换排序方法,其基本思想为:任取待排序元素序列中的某元素作为基准值 ,按照该基准值将待排序集合分割成两个子序列,左子序列中的所有元素小于基准值,右子序列中所有元素均大于基准值,然后对左右子序列重复该过程,知道所有的元素都排列在相应位置上为止。将区间按照基准值划分为左右两部分的常见方法有: Hoare版本 挖坑法...原创 2018-09-24 15:35:51 · 1491 阅读 · 0 评论 -
Java版本的希尔排序
C语言版本的希尔排序public class ShellSort { public static void main(String[] args) { int [] arr = new int[]{3,8,5,7,6,9,4,2,1}; System.out.print("排序前:"); for(int i:arr){ ...原创 2019-04-13 20:07:31 · 293 阅读 · 0 评论 -
Java版本的选择排序及选择排序的优化
选择排序及选择排序的优化C语言版public class SelectSort{ public static void main(String[] args) { int[] arr = new int[]{10,2,5,4,6,9,3,1,0}; System.out.print("排序前:"); for(int i:arr){ ...原创 2019-04-09 16:42:59 · 682 阅读 · 0 评论 -
Java版本的归并排序
C语言版本的归并排序public class MergeSort { public static void main(String[] args) { int[] arr = new int[]{3,8,5,7,6,9,4,2,1}; System.out.print("排序前:"); for(int i:arr){ ...原创 2019-04-12 18:33:37 · 163 阅读 · 0 评论 -
Java版的冒泡排序
冒泡排序c语言版public class BubbleSort { public static void main(String[] args) { int[] arr = new int[]{3,8,5,7,6,9,4,2,1}; System.out.print("排序前:"); for(int i:arr){ ...原创 2019-04-11 19:33:31 · 406 阅读 · 0 评论 -
Java版本的插入排序
C语言版本的插入排序详解public class InsertSort { public static void main(String[] args) { int [] arr = new int[]{3,8,5,7,6,9,4,2,1}; System.out.print("排序前:"); for(int i:arr){ ...原创 2019-04-11 19:10:53 · 115 阅读 · 0 评论 -
堆排序算法详解及实现-----------c语言
堆排序原理: 堆排序指的是将大堆(小堆)堆顶(即下标为0)元素与堆的最后一个(即下标为hp->size - 1)元素交换,hp->size–,将其余的元素再次调整成大堆(小堆),再次将堆顶(即下标为0)元素与堆的最后一个(即下标为hp->size -原创 2018-09-21 20:33:13 · 1917 阅读 · 0 评论 -
插入算法算法详解及实现----c语言
插入排序: 每一步将一个待排序的元素,按照其大小,插入到已经排好序的数组的合适位置上去,使得数组依然有序。 换句话说,即将一组数据分成两组,我分别将其称为有序组与待插入组。每次从待插入组中取出一个元素,与有序组的元素进行比较,并找到合适的位置,将该元素插到有序组当中。就这样,每次插入一个元素,有序组增加,待插入组减少。直到待插入组元素个数为0。 时间复杂度: 最差情况下:0(n^...原创 2018-09-17 10:21:27 · 5489 阅读 · 0 评论 -
希尔排序算法详解及实现---c语言
插入排序算法详解及实现 关于插入排序我们知道,它适用于有少量数据的情况,但是若数据量比较大我们应该如何进行排序呢? 一种方法当然是希尔排序。 希尔排序也是利用插入排序的思想来排序。希尔排序通过将比较的全部元素分为几个区域来提升插入排序的性能。这样可以让一个元素可以一次性地朝最终位置前进一大步。然后算法再取越来越小的步长进行排序,算法的最后一步就是普通的插入排序,但是到了这步,需排序的数...原创 2018-09-20 16:26:09 · 10256 阅读 · 1 评论 -
选择排序及选择排序的优化算法详解及实现----c语言
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置(或末尾位置),直到全部待排序的数据元素排完。 由于选择排序一次能确定一个元素的位置,所以选择排序需要循环size-1次。 算法的稳定性: 不稳定 (比如序列【5, 5*, 3】第一趟就将第一个[5]与[3]交换,导致第一个5挪动...原创 2018-09-20 18:22:18 · 14100 阅读 · 4 评论 -
冒泡排序------c语言
冒泡排序的思路: 1. 数据两两比较,将较大的数据挪到后面,这样一次循环后就可以确定一个元素的最终位置。 2. 接着从头开始两两比较,将次大的数据挪到上次已经排序好的数据的前一个位置。 3. 重复size-1次即可将size-1个元素放到它的最终位置上,这样剩下的那个元素肯定在自己的最终位置上,冒泡排序结束。 代码实现:#include<string.h>...原创 2018-09-21 18:17:29 · 640 阅读 · 0 评论 -
归并排序
归并排序与快速排序的思想基本一致,唯一不同的是归并排序的基准值是数组的中间元素。 关于快速排序的思想代码:#include<stdlib.h>#include<stdio.h>#include<string.h>void Print(int *arr,int size);//归并void Merge_sort(int *arr, int...原创 2018-09-26 20:35:35 · 153 阅读 · 0 评论 -
快速排序的非递归实现-----c语言
前面我们讲解了快速排序的递归实现,但若是待排序的数量非常大且杂乱无章,每层循环都使用递归调用,会很容易造成栈溢出,所以我们可以将快速排序设计为非递归实现。递归实现快速排序算法详解 快速排序是从序列中选择一个基准值,按照某种方式将该区间分成两部分,基准值左侧所有元素比基准值小,基准值右侧所有元素比基准值大。然后排基准值左侧部分,排基准值右侧部分。 若想把快速排序改成循环最重要的是将基准...原创 2018-09-25 17:53:36 · 9923 阅读 · 8 评论 -
Java版本的堆排序(原理及代码)
堆排序原理: 堆排序指的是将大堆(小堆)堆顶(即下标为0)元素与堆的最后一个元素(下标为size)交换,将其余的元素再次调整成大堆(小堆),再次将堆顶(即下标为0)元素与堆的最后一个(下标为size-1)元素交换,将其余的元素再次调整成大堆(小堆)…………重复上述步骤,直至size = 0关于升序或者降序应该建立什么堆???若想排升序即最大值应该在最后面,根据堆排序原理,应该建大堆,这样将堆...原创 2019-05-08 16:43:08 · 319 阅读 · 0 评论