- 博客(8)
- 资源 (10)
- 收藏
- 关注
原创 基数排序,桶排序
计数排序和桶排序都只是在研究一个关键字的排序,现在我们来讨论有多个关键字的排序问题。基数排序方法;从最低有效关键字开始排序,称为 LSD(Least Significant Dight)排序 。首先对所有的数据按照次要关键字排序,然后对所有的数据按照首要关键字排序。要注意的是,使用的排序算法必须是稳定的,否则就会取消前一次排序的结果。由于不需要分堆对每堆单独排序。通常,基数
2017-06-23 15:51:46 290
原创 计数排序
非比较排序: ,计数排序,基数排序,桶排序,时间复杂度能够达到O(n). 这些排序为了达到不比较的目的,对数据做了一些基本假设(限制)。如计数排序假设数据都[0,n] 范围内,且范围较小;基数排序假设数据都[0,n] 范围内;也是桶排序假设数据均匀独立的分布。而且,非比较排序的空间要求比较高,用空间换取时间吧。当我们的待排序数组具备一些基数排序与桶排序要求的特性,且空间上又比较富裕
2017-06-23 15:35:30 198
原创 选择排序
时间复杂度O(n^2), 空间复杂度O(1)排序时间与输入无关,最佳情况,最坏情况都是如此, 不稳定。代码:void sort(int arraytoSort){ for(int i = 0; i<arraytoSort.length-1; i++){ int min = i; int temp;
2017-06-23 15:29:24 177
原创 快速排序
比较排序的一种,其实快速排序是基于 “二分” 的思想。快速排序之所比较快,每次交换是跳跃式的。每次排序的时候设置一个基准点,将小于等于基准点的数全部放到基准点的左边,将大于等于基准点的数全部放到基准点的右边。快速排序:时间复杂度 O(nlogn) 空间复杂度O(logn) 不稳定 【两个时间复杂度O(nlogn) 的排序算法都不稳定】由于关键字的比较和交换是跳跃进行的,
2017-06-21 20:02:43 208
原创 堆排序
时间复杂度 O(nlogn), 空间复杂度O(1). 从这一点就可以看出,堆排序在时间上类似归并,但是它又是一种原地排序,时间复杂度小于归并的O(n+logn)排序时间与输入无关,最好,最差,平均都是O(nlogn). 不稳定堆排序借助了堆这个数据结构,堆类似二叉树,又具有堆积的性质(子节点的关键值总小于(大于)父节点) 堆排序包括两个主要操作:保持堆的性质heap
2017-06-20 16:05:49 288
原创 冒泡排序
冒泡排序属于比较排序的一种。时间复杂度O(n^2), 空间复杂度O(1), 稳定,因为存在两两比较,不存在跳跃。排序时间与输入无关,最好,最差,平均都是O(n^2)。核心代码:void bubbleSort(int aarraytoSort[]){ for(int i=0;i<arraytoSort.length-1;i++){
2017-06-20 15:54:28 612
原创 归并(合并)排序
归并排序,一种比较排序,通过对数组中的元素进行比较得出排序结果。时间复杂度 O(nlogn),空间复杂度O(n) +O(logn)排序时间与输入无关,最佳情况,最坏情况都是如此, 稳定。原理:可以将数组分成二组。依次类推,当分出来的小组只有一个数据时,可以认为这个小组组内已经达到了有序,然后再合并相邻的二个小组就可以了。这样通过先递归的分解数列,再合并数
2017-06-18 16:58:39 1028 1
原创 插入排序算法
对于插入排序算法来说,它是一种比较排序的一种。以后的博文中我会陆续介绍其余的几种排序算法。时间复杂度O(n^2),空间复杂度O(1)排序时间与输入有关:输入的元素个数;元素已排序的程度。最佳情况,输入数组是已经排好序的数组,运行时间是n的线性函数; 最坏情况,输入数组是逆序,运行时间是n的二次函数。核心代码:void insertionSort(int
2017-06-18 16:35:35 235
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人