- 博客(15)
- 收藏
- 关注
原创 快速排序
快速排序快速排序的基本思想:通过一趟排序将待排记录分隔成独立的两部分,其中一部分记录的关键字均比另一部分的关键字小,则可分别对这两部分记录继续进行排序,以达到整个序列有序。思想从数列中挑出一个元素,称为 “基准”(pivot);重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准的后面(相同的数可以到任一边)。在这个分区退出之后,该基准就处于数列的中间位置。这个称为分区(partition)操作;递归地(recursive)把小于基准值元素的子数列和大于基准值元素的子数
2020-11-26 14:20:33
258
原创 归并排序
归并排序归并排序是建立在归并操作上的一种有效的排序算法。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。思想把长度为n的输入序列分成两个长度为n/2的子序列;对这两个子序列分别采用归并排序;将两个排序好的子序列合并成一个最终的排序序列。图示代码public static int[] guibing(int[] arr,in
2020-11-26 14:17:04
218
原创 希尔排序
希尔排序思想先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,具体算法描述:选择一个增量序列t1,t2,…,tk,其中ti>tj,tk=1;按增量序列个数k,对序列进行k 趟排序;每趟排序,根据对应的增量ti,将待排序列分割成若干长度为m 的子序列,分别对各子表进行直接插入排序。仅增量因子为1 时,整个序列作为一个表来处理,表长度即为整个序列的长度。图示代码function shellSort(arr) { var len = arr.length;
2020-11-26 14:13:42
233
原创 选择排序
选择排序思想在长度为N的无序数组中,第一次遍历n-1个数,找到最小的数值与第一个元素交换;第二次遍历n-2个数,找到最小的数值与第二个元素交换;。。。第n-1次遍历,找到最小的数值与第n-1个元素交换,排序完成。图示代码public static void select_sort(int array[],int lenth){ for(int i=0;i<lenth-1;i++){ int minIndex = i; for(int j=i+1;j&
2020-11-26 14:10:00
238
2
原创 冒泡排序
冒泡排序思想比较相邻的元素。如果第一个比第二个大,就交换它们两个;对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;针对所有的元素重复以上的步骤,除了最后一个;重复步骤1~3,直到排序完成。图示代码public static void BubbleSort(int [] arr){ int temp;//临时变量 for(int i=0; i<arr.length-1; i++){ //表示趟数,一共arr.le
2020-11-26 14:06:42
246
原创 插入排序
插入排序思想插入排序,一般也被称为直接插入排序。对于少量元素的排序,它是一个有效的算法 。插入排序是一种最简单的排序方法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而一个新的、记录数增1的有序表。在其实现过程使用双层循环,外层循环对除了第一个元素之外的所有元素,内层循环对当前元素前面有序表进行待插入位置查找,并进行移动 。图示代码public static void insert_sort(int array[],int lenth){ int temp; for(
2020-11-26 13:56:54
184
原创 自定义view之简单实现字母索引列表
自定义view之简单实现字母索引列表效果思路大体可分为两部分,一个是中间显示的英文字符,一个是右侧的字母索引列表,通过自定义view方法,计算每个字母的高度,然后依次绘制,通过触碰,绘制中心显示的文字,最后通过handler延时操作使其消失代码import android.annotation.SuppressLint;import android.content.Context;import android.graphics.Canvas;import android.graphics.
2020-09-21 16:09:01
430
原创 堆排序,我可算是明白了
堆排序从入门到精通吾学堆良久,阅百篇文章,然而未曾见一篇详尽其精髓,便属此文,以便他人学习,如有不足,还望大佬多多赐教。啥是堆?堆是一种数据结构,是一种完全二叉树啥是完全二叉树?尽量满足一个根节点有两个叶节点,(如果都满足了,就是满二叉树),如果满足不了,紧着最左边的使用,也就是说只有最后一层可以出现单节点的情况,而且是右侧不能出现单节点而左侧没有节点的情况。感觉说的不咋好,画个图来说明一下,如上图所示,圆心的数字顺序即代表着添加叶子的顺序,从上到下,从左到右,依次进行,此时,这个就是一个完全
2020-09-02 19:22:13
520
原创 leetcode:字符串相乘
leetcode:字符串相乘描述:给定两个以字符串形式表示的非负整数 num1 和 num2,返回 num1 和 num2 的乘积,它们的乘积也表示为字符串形式。示例 1:输入: num1 = "2", num2 = "3"输出: "6"示例 2:输入: num1 = "123", num2 = "456"输出: "56088"说明:num1 和 num2 的长度小于110。num1 和 num2 只包含数字 0-9。num1 和 num2 均不以零开头,除非是数字 0 本身。
2020-06-23 14:40:44
430
原创 leetcode:字符串的排列
leetcode:字符串的排列题目描述:给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。换句话说,第一个字符串的排列之一是第二个字符串的子串。示例1:输入: s1 = "ab" s2 = "eidbaooo"输出: True解释: s2 包含 s1 的排列之一 ("ba").示例2:输入: s1= "ab" s2 = "eidboaoo"输出: False 注意:输入的字符串只包含小写字母两个字符串的长度都在 [1, 10,000] 之间方
2020-06-22 15:00:21
699
原创 插入排序及其变换
插入排序思想数组中依次遍历,从左到右(反过来也可以,只是很少有人那么干),遍历的第一个元素,假定为有序的,从第二个开始,依次和左侧的数进行比较,根据比较规则进行替换,就这样依次作比较,最终得出一个有序的数组代码:java实现public static int[] doInsertSort(int[] array) { if(array.length <= 1) return array; for (int i = 1; i < array.length; i++) { in
2020-06-19 17:33:59
187
原创 leetcode题解:最长公共前缀
leetcode题解:最长公共前缀题目描述编写一个函数来查找字符串数组中的最长公共前缀。如果不存在公共前缀,返回空字符串 ""。示例 1:输入: ["flower","flow","flight"]输出: "fl"示例 2:输入: ["dog","racecar","car"]输出: ""解释: 输入不存在公共前缀。说明:所有输入只包含小写字母 a-z 。思路与代码//1,计算最短的字符串的长度 //2,挨个比较每个字符串的前minLength位
2020-06-19 13:07:41
279
原创 leetcode题解:无重复字符的最长子串
leetcode题解:无重复字符的最长子串给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的长
2020-06-18 17:01:20
508
原创 leetcode每日一题:01两数之和
leetcode每日一题:01两数之和题目描述给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素不能使用两遍。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nu来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/two-sum解题思路1:两个 for循
2020-06-07 21:41:38
249
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅