![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构和算法
文章平均质量分 59
数据结构和算法
一窝小猪仔
邮箱cifeixiang@163.com
展开
-
Top K 问题一网打尽
Top K 问题Top K 问题,指的是在一个无序数组中,找前 K 大的元素或者第 K 大的元素,这两个问题其实是一个问题,有着共同的解法.本文将针对【找出第K大元素】这个问题给出 4 中不同的解法。解决方案1 遍历 + 插入排序,O(nk)我们可以想到最暴力简单的方式就是把 K 个最大的元素保存在一个有序数组中,每次从原数组遍历拿一个元素,用插入排序的方式去更新这个有序数组,最后,这个数组就是 Top K 的元素。import java.lang.reflect.Array;impo原创 2021-04-01 15:33:36 · 273 阅读 · 0 评论 -
七种排序java实现
package homework;import static java.lang.System.gc;public class Sort { private static int[] a ={1,2,3,4,0,-1,11,23,1,-9,1,2,3,4,5,6,7,8,9,99,88,77,665,55,44,33,22,11,23,24,25,-1,-22,-34,-54,-7...原创 2020-03-23 14:37:07 · 183 阅读 · 0 评论 -
python基础--实现大数到任意进制的转换
问题实现大数,远远超过python能表示的整数,比如有上百位整数,到2-16进制的转换.解决思路讲大数存在字符串,从大数的最高位开始,依次到最低位,每一位取出来转换成整数,对进制x进行整除和取余,将商保存在字符串中,将余数*10加上大数的下一位作为新的被除数,以此类推,直到大数取完为止。得到了整个大数一次的商和余数,再用迭代相除法,直到商为0停止,记录每次的余数,即可算出转换之后的...原创 2018-03-19 10:52:13 · 2098 阅读 · 4 评论 -
python十分简单实现十进制到任意进制的转换
目的输出一个十进制的数和需要转换的进制,可以实现转换进制。进制的范围是2-16方法方法非常简单,就是利用辗转相除发, 保存商和余数,知道商为0为止,再将余数反转。 用列表a=[0,1,2,3,4,5,6,7,8,9,’A’,’b’,’C’,’D’,’E’,’F’]储存转换之后的每一位,直接用余数作为指针即可找到对应的符号。代码(python3.5)def f(n,...原创 2018-03-19 00:12:02 · 29732 阅读 · 3 评论 -
迭代求立方根
键盘输入一个实数a,输出它的立方根。请自行设计算法编写程序,不允许调用pow函数。假设a的立方根为x,则x3=a,问题转化求一元高次方程x3-a=0的解#includeint main(){ double a,n,m,x; scanf("%lf",&a); n=0; m=a; while(1) /*用n,m反复迭代,每次用n,原创 2016-11-08 14:38:11 · 2325 阅读 · 0 评论 -
O(n)时间复杂度找到数组中任意一个重复元素
解决思路用计数排序的思想排序,直到发现重复的结束。关于计数排序请看:计数排序代码#include<stdio.h>/*检查数组中重复的元素,并输出,数组里面的整数大小不超过n-1,n是数组规模采用交换下标的方式,时间复杂度为n*/void exchange(int *a,int j,int i){ int ex; ex=a[i]; a[i]=a[...原创 2018-11-22 18:40:09 · 1074 阅读 · 3 评论 -
AOJ--字符串全排列
问题设计算法生成n个元素{r1,r2,…,rn}的全排列。n&lt;=10。按照字典序排列。思路可以将问题递归的看作两个部分: 1、依次将字符串的每一个按顺序一定到第一位,剩下的长度为(n-1)的字符串看作一个新的串 如:abcd 可以有: a bcd b acd c abd ...原创 2018-04-09 09:25:41 · 345 阅读 · 0 评论 -
二叉查找树详解
二叉查找树性质1、二叉树每个树的节点最多有两个子节点的树叫做二叉树。2、二叉查找树一颗二叉查找树是按照二叉树的结构来组织的,并且满足一下性质: 一个节点所有左子树上的节点不大于盖节点,所有右子树的节点不小于该节点。 对查找树的操作查询,插入,删除等操作的时间复杂度和树的高度成正比, 因此,构建高效的查找树尤为重要。查找树的遍历先序遍历查找树的遍历可以很简单的采用递归的方法来实现。struct l原创 2017-03-12 16:36:46 · 1867 阅读 · 2 评论 -
比快速排序更快的排序--计数排序及其稳定性
假设有一个班级的小学生去操场上体育课,体育老师要求他们按照身高次序站成一队。每个小学生都知道自己的具体身高是多少厘米(假设每个小学生身高都不一样,否则就会为争执位置打架),但每个小学生都不承认别人比自己高,非得互相询问身高比较才能承认,大多数小学生在经过很多次询问和被询问后才能老老实实站在自己的位置上。场面叽叽喳喳混乱不已,快下课才排好队。原创 2017-03-03 19:09:43 · 4068 阅读 · 11 评论 -
快速排序
快速排序快速排序是一种常用的有效的排序方式。核心思想是分治法。原创 2017-03-03 00:58:09 · 355 阅读 · 0 评论 -
(二叉)堆排序
堆排序是经典的排序算法。利用了完全二叉树的性质,是一种原地排序算法。原创 2017-03-02 15:51:25 · 450 阅读 · 0 评论 -
冒泡排序
冒泡排序采用泡泡的想法,每次把无序序列中一个最小的交换到顶端,完成排序。若一趟没有发生交换,则说明序列已经有序了,可以停止排序,节约时间。#includevoid bubble_sort(int *a,int length){ int i,j,temp; int conter;//排序终止的标识 for(i=0;i<length;i++) {原创 2017-02-25 22:10:35 · 455 阅读 · 0 评论 -
合并排序
利用的分治和递归的思想。#include#includevoid merge(int *a,int p,int q,int r)//p到q为左边待合并的,q+1到r为右边待合并的{ int k1=q-p+1;//左边待合并元素的个数 int k2=r-q;//右边待合并元素的个数 int i,j,k; int *left,*right; left=(i原创 2017-02-25 21:33:45 · 378 阅读 · 0 评论 -
插入排序
编程环境:windows 7,code bloaks #include void insertion_sort(int *a,int length)//插入排序 { int i,j; int key;//待排序的数 for(i=1;i<length;i++)//依次选定一个数 { key=a[i]; j=i-1;原创 2017-02-23 21:39:24 · 400 阅读 · 0 评论 -
Python内存机制和浅复制
python内存机制Python的一切都是对象。相同的对象其实是同一块内存。如:>>> x=3>>> y=3>>> id(x)1840994608>>> id(y)1840994608>>>x,y变量名不同,但是同一块内存。此时若给y赋新的值,x不会变,因为y赋值等于给y创建了新对象。>>> y=4>>> x3>>> id(y)18409原创 2016-11-08 13:22:20 · 482 阅读 · 0 评论