![](https://img-blog.csdnimg.cn/20201014180756930.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 78
Liubinxiao
这个作者很懒,什么都没留下…
展开
-
引入
如果 a+b+c=1000,且 a^2+b^2=c^2(a,b,c 为自然数),如何求出所有a、b、c可能的组合?三重循环:import timestart_time = time.time()for a in range(0,1001): for b in range(0,1001): for c in range(0,1001): if a**2+b*...原创 2018-03-11 13:08:39 · 149 阅读 · 0 评论 -
链表栈的实现以及与数组栈的对比
引入上篇中实现的链表类,同时定义一个Stack的接口public class LinkedListStack<E> implements Stack<E> { private LinkedList<E> list; public LinkedListStack() { list = new LinkedList<>...原创 2018-05-13 15:13:57 · 1396 阅读 · 0 评论 -
链表的实现
//添加操作addLast(e):O(n);addFirst(e):O(1);add(index e):O(n/2)=O(n)//删除操作:removeLast(e):O(n);removeFirst(e):O(1);remove(index e):O(n/2)=O(n)//修改操作O(n)//查找操作:O(n)public class LinkedList<E> { ...原创 2018-05-13 15:02:57 · 173 阅读 · 0 评论 -
数组队列和循环队列
定义一个Queue的接口public interface Queue<E> { int getSize(); boolean isEmpty(); void enqueue(E e); E dequeue(); E getFront();}引入之前自定义的动态数组Array类//出队时间复杂度是O(n),其余为O(1)public clas...原创 2018-05-13 14:54:57 · 553 阅读 · 0 评论 -
数组栈的实现
首先设计一个Stack的接口,定义5种操作,分别为获取栈中元素个数,是否为空,添加元素,删除元素,取出栈顶元素public interface Stack<E> { int getSize(); boolean isEmpty(); void push(E e); E pop(); E peek();//取栈顶元素,所有操作的时间复杂度都为O(1...原创 2018-05-13 14:48:01 · 270 阅读 · 0 评论 -
使用Java动态数组的实现
使用Java中的数组int[] arr=new int[10];for(int i=0;i<arr.length;i++) arr[i]=i;int[] scores =new int[]{100,99,66};for (int i=0;i<scores.length;i++) System.out.println(scores[i]);for(int scor...原创 2018-05-13 14:23:08 · 17357 阅读 · 2 评论 -
希尔,归并,快排,堆排序
希尔排序,也称递减增量排序算法,是插入排序的一种更高效的改进版本。但希尔排序是非稳定排序算法。希尔排序是基于插入排序的以下两点性质而提出改进方法的:插入排序在对几乎已经排好序的数据操作时,效率高,即可以达到线性排序的效率;但插入排序一般来说是低效的,因为插入排序每次只能将数据移动一位;希尔排序的基本思想是:先将整个待排序的记录序列分割成为若干子序列分别进行直接插入排序,待整个序列中的记录“基本有序...原创 2018-05-02 14:34:47 · 254 阅读 · 0 评论 -
冒泡选择插入排序O(n^2)
冒泡排序冒泡排序(Bubble Sort)是一种简单直观的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。作为最简单的排序算法之一,冒泡排序给我的感觉就像 Abandon 在单词书里出现的感觉一样,每次都在第一页第...原创 2018-04-30 16:05:25 · 268 阅读 · 0 评论 -
十大经典排序算法
排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。关于时间复杂度:平方阶 (O(n2)) 排序 各类简单排序:直接插入、直接选择和冒泡排序。线性对数阶 (O(nlog2n)) 排序 快速排序、...原创 2018-04-30 14:37:41 · 123 阅读 · 0 评论 -
两重循环
import time start_time=time.time()for a in range(0,1001): for b in range(0,1001): c=1000-a-b if a**2+b**2==c**2: print("a,b,c:%d,%d,%d" % (a,b,c)) end_time=time....原创 2018-03-11 13:15:12 · 299 阅读 · 0 评论 -
链表队列及其与数组队列的比较
//添加元素是从列表尾部tail,删除元素从链表头部headpublic class LinkedListQueue<E> implements Queue<E> { private class Node{ public E e; public Node next; public Node(E e, Node ne...原创 2018-05-13 15:17:14 · 1566 阅读 · 0 评论