排序
小陈大人
没有对象那就new一个
展开
-
三种简单排序算法---冒泡排序,简单选择排序,直接插入排序
冒泡排序 核心思想:类似水泡一样,一趟比较,通过相邻元素的交换,冒出当前序列的最小值(最大值)到相应位置 复杂度分析 最好的情况:序列本身有序,只要进行n-1次比较,无需交换,时间复杂度为O(n) 最差情况: 序列逆序,此时需要比较1+2+3+...(n-1)=n(n-1)/2次,并进行等数量级的交换 辅助空间:O(1) 综上,总的时间复杂度为O(n^2) 稳定性:稳定 void b...原创 2018-06-05 17:20:09 · 2236 阅读 · 1 评论 -
希尔排序
希尔排序 核心思想:其实就是直接排序的升级版,把序列按照一定的增量分组,各小组之间用直接排序的方法排好序,接着把增量缩小,重复此过程,直到最后增量为1 复杂度分析: 希尔排序是相隔某个增量的记录而组成的一个子序列,实现跳跃式的移动,使得效率提高 迄今为止没找到最优的增长序列,但增量序列的最后一个值必须为1 最好:O(n^3/2) 最差:O(n^2) 平均:O(nlogn)~O(n^2) 时间...原创 2018-06-05 21:43:13 · 96 阅读 · 0 评论 -
归并排序
归并排序 核心思想: 是分治算法的典型应用,归并排序中的来说就两步 分:把序列分成左右子序列,左右子序列又细分成各自的左右子序列,直到左右子序列都各只有一个(递归实现) 治:对分好的子序列分别进行合并排序,这里排序的方法是定义两个哨兵,左哨兵指向左子序列的首元素,右哨兵指向右子序列的首元素,然后两者指向的值进行比较,谁小,则谁先存入新数组,直到左右序列都存完 时间复杂度: 最好最差均为O...原创 2018-06-05 22:03:04 · 114 阅读 · 0 评论 -
堆排序
堆排序 核心思想: 前提知识:堆其实就是一种特殊的完全二叉树,分为大顶堆和小顶堆,大顶堆就是指父节点>=左右孩子结点,而左右孩子结点之间的大小关系随意,小顶堆反之 堆排序核心:就是先把序列构建成大顶堆序(升序用大顶堆),然后大顶堆的根节点和最后一个结点交换位置,这样一来每交换一次就得到当前序列的最大值,并把它放在了最后面,接着把剩下的序列继续构建成大顶堆,重复上面动作,直到序列只剩一个...原创 2018-06-06 10:14:24 · 2075 阅读 · 0 评论 -
快速排序
快速排序 核心思想: 快速排序就是立一个数作为基准数,比他小的统统放左边,比他大的统统放在他的右边,接着通过递归,对它的左边序列,右边序列重复此过程,直到无数可分 复杂度分析 最好情况:O(nlogn) 最差情况:O(n^2) 平均情况:O(nlogn) 辅助空间:O(logn)~O(n) 稳定性:不稳定 图解 如序列{6,1,2,7,9,3,4,5,10,8} 6作为基准数,左右...原创 2018-06-06 12:37:25 · 117 阅读 · 0 评论