排序
基础入门的集中排序算法
洛白双双
一个超爱笑的女孩
展开
-
leetcode【数组中的逆序数对】
题目描述:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007测试用例:输入:[7, 5, 6, 4]输出:5思路基于归并排序的思想实现数组中的逆序对的统计。代码如下:public class Solution { public int InversePairs(int [] array) { return原创 2021-08-17 12:12:51 · 201 阅读 · 0 评论 -
玩转快速排序(递归+非递归)
1.基本思想通过一趟排序将要排序的数据分割成独立的两部分,其中左边的元素值都要小于等于基准值,右边的元素都要大于等于基准值,然后再按此方法对这两部分数据分别进行快速排序。整个排序过程可以递归进行,以此达到整个数据变成有序序列。快速排序算法通过多次比较和交换来实现排序,其排序流程如下:(1)首先设定一个分界值,通过该分界值将数组分成左右两部分(2)将大于或等于分界值的数据集中到数组右边,小于分界值的数据集中到数组的左边(3)然后对左边和右边的数据可以独立排序。对于左侧的数组数据,又可以取一个分界值原创 2021-07-18 16:27:18 · 136 阅读 · 1 评论 -
堆排序(Java实现)
1.基本思想将待排序的序列构成一个大堆。此时,整个序列的最大值就是堆顶的根节点。将堆顶元素与堆中的末尾元素交换,把最后一个元素从堆中删除。然后将剩余的n-1个序列重新构造一个大堆,重复上述步骤,就可以得到一个升序的有序序列举例:{9,5,2,7,3,6,8}进行堆排序的过程2.性能分析时间复杂度:O(NlogN)空间复杂度:稳定性:3.代码实现代码如下:...原创 2021-07-17 22:42:27 · 91 阅读 · 0 评论 -
选择排序(Java实现)
1. 算法描述选择排序:在一个长度为N的无序数组中,在第一趟遍历N个数据,找出其中最小的数值与第一个元素交换,第二趟遍历剩下的N-1个数据,找出其中最小的数值与第二个元素交换…第N-1趟遍历剩下的2个数据,找出其中最小的数值与第N-1个元素交换,至此选择排序完成。举例:如有以下数组:{9,5,2,7,3,6,8}第一趟选择排序:{2,9,5,7,3,6,8}第二趟选择排序:{2,3,5,9,7,6,8}第三趟选择排序:{2,3,5,6,9,7,8}第四趟选择排序:{2,3,5,6,7,9,原创 2021-07-17 21:28:01 · 388 阅读 · 0 评论 -
希尔排序
希尔排序原理动画演示思路讲解代码实现效率分析稳定性时间复杂度空间复杂度原理希尔排序是一种插入排序的优化,将一个完整的数组分成若干组,进行插入排序,分组不断变小,排序的效率也会不断提高;动画演示思路讲解引入一个gap表示分组数,gap的初始值为array.length/2,然后分别对两组数据进行插入排序;gap每次都为上一次的二分之一,最终当gap为1的时候,对整体在进行一次插入排序;代码实现代码如下:import java.util.Arrays;public class T原创 2021-03-04 19:33:33 · 209 阅读 · 2 评论 -
插入排序
插入排序原理动画演示思路讲解代码实现效率分析稳定性时间复杂度空间复杂度原理 插入排序是一种最简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。动画演示思路讲解将给定的数组分为两个区间:①已排序区间[0,bound]②未排序区间[bound,size)分别记录未排序区间的第一个元素和已排序区间最后一个元素的下标,依次比较待排序区间和已排序区间每个元素的大小关系,寻找合适的位置将待排序区间的元素插入已排序区间;代码实现原创 2021-03-03 21:26:18 · 94 阅读 · 1 评论