![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
排序
jamie_byr
这个作者很懒,什么都没留下…
展开
-
排序——插入排序(InsertSort)
插入排序:通过构建的有序序列,将未排序序列插入有序序列中,从后往前遍历有序序列,找到插入序列的位置。具体操作是:将数组中位置为i的数据arr[i]插入有序序列中,即需要从后往前遍历0~i-1位置上的数,分别比较,找到arr[i]这个数在有序序列中应该放置的位置。依次执行上述操作,直到数据全部有序为止。插入排序的平均时间复杂度为O(n^2),最优时间复杂度为O(n),最差的时间复杂度为O(n^2)。...原创 2018-04-10 11:12:11 · 224 阅读 · 0 评论 -
排序——归并排序(merge sort)
归并排序(merge sort):归并是将两个或者两个以上的有序表合并成一个新的有序表。归并排序使用分而治之的方法进行排序:分解:将待排序的n个元素分解成两个子序列,每个序列包括n/2个元素。治理:对每个子序列分别排序。合并:将两个排序好的子序列合并,生成排序结果。归并排序的最优时间复杂度、最差时间复杂度和平均时间复杂度均为O(nlogn)。归并排序的空间复杂度为O(n)。归并排序多次进行上述操作...原创 2018-04-08 16:12:37 · 353 阅读 · 0 评论 -
排序——冒泡排序(Bubble Sort)
冒泡排序:每次都比较相邻位置的两个数,将两个数中较大值放在右边,最小值放在左边。每次比较都能够确定较大值的最终位置,因此下次比较中,所需进行比较的数减1.冒泡排序的平均时间复杂度为O(n^2),最好时间复杂度为O(n^2),最差时间复杂度为O(n^2)。冒泡排序的平均空间复杂度为O(1),最好空间复杂度为0,最差空间复杂度为O(n)。代码实现如下:public static void bubble...原创 2018-03-20 11:12:52 · 274 阅读 · 0 评论 -
排序——选择排序(Select sort)
选择排序:假设需要进行排序的有n个数,每次选择一个位置,依次与后面的数进行比较,确定该位置所存的数。假设排序为升序,依次选择从前到后的位置,每次都与其后面的所有数进行比较,选出最小值,放在所定位置中。选择排序的最好时间复杂度、最差时间复杂度和平均时间复杂度均为O(n^2)。选择排序的最好空间复杂度为0,最差空间复杂度为O(n),平均空间复杂度为O(1)。选择排序和冒泡排序的时间复杂度和空间复杂度是...原创 2018-03-20 14:30:34 · 1053 阅读 · 0 评论 -
排序——快速排序(Quick sort)
快速排序:是冒泡排序的改进型。首先在数组中选取一个基准点,设置进行快排的数组段low~high。对于每一次快排,设置前后两个遍历指针start和end,分别初始化为排序数组的首位和末位。假设刚开始设置的基准点为数组中的第一个元素,先从后面遍历,end一次减小,如果找到一个比基准点小的数,就交换两者的位置。然后从前面遍历,start依次增大,如果找到一个比基准点大的值就交换两者的位置,直到前后遍历的...原创 2018-03-21 11:23:19 · 294 阅读 · 0 评论 -
二分查找(Binary Search)
二分查找:对于长度为n的有序数组arr,判断数组中是否存在目标数key,如果存在,返回其在数组中的位置,如果不存在,返回-1。其原理是:先设置查找区域low~high,比较arr[(low + high)/2]与key的大小, 如果key大于arr[(low + high)/2],则查找区域变为(low + high)/2 ~high,否则,查找区域变为low~(low + high)/2。依次进...原创 2018-03-21 11:46:48 · 229 阅读 · 0 评论 -
排序——堆排序
堆排序:根据堆结构的性质,对数组进行排序。堆分为大顶堆和小顶堆,大顶堆是指父节点的值总是大于左右子节点的值,小顶堆是指父节点的值总是小于等于左右子节点的值。数组在进行堆排序时,需要将数组先构造成对应的堆结构,然后根据堆的性质,进行排序。大顶堆的第一个元素都是堆中的最大值,小顶堆的第一个元素都是堆中的最小值。堆排序的时间复杂度是O(nlogn).大顶堆和小顶堆排序的实现代码分别如下,注意,用大顶堆进...原创 2018-04-10 18:51:33 · 119 阅读 · 0 评论