
数据结构与算法
APOLLO_TS
SoftWare Develop
展开
-
双轴快速排序
双轴快排(DualPivotQuicksort),有两个轴元素pivot1,pivot2,且pivot ≤ pivot2,将序列分成三段:x < pivot1、pivot1 ≤ x ≤ pivot2、x > pivot2,然后分别对三段进行递归。先简易实现它,然后按照java历次更改的初衷进行更改。简易实现唯一需要注意的是并非每次循环有效。def dual_quick_sort(arr: [], start, end) -> None: if start >= en原创 2021-01-03 20:55:02 · 1086 阅读 · 0 评论 -
简单快速排序
采用哨兵投石法理解简单快速排序,这是理解双轴排序的基础,双轴排序表面简单,但根据java工业程序来看,发展历次更迭,已经有些难以理解了,之后我又添加一些逻辑可能会导致逻辑判断过多,失去算法的本真。所以先采用最简单的基准值选取思路,就是开头结尾选基准值。# -*- coding: utf-8 -*-"""------------------------------------------------- 开发人员:Edwin 开发日期: 开发工具:PyCharm 功能.原创 2020-12-29 19:55:02 · 569 阅读 · 0 评论 -
归并排序
# -*- coding: utf-8 -*-"""------------------------------------------------- 开发人员:Edwin 开发日期: 开发工具:PyCharm 功能描述:归并排序,好坏的时间复杂度都一致,虽然浪费超过一倍的存储空间 但这个特性十分完美。 -------------------------------------------------"""def merge_sort(alist: ...原创 2020-12-27 15:50:45 · 317 阅读 · 1 评论 -
整形数组反序
public class ArraysUtil { /** * int数组反序 * @param a 需要反序的数组 */ public static void reverse(int a[]) { int t = 0; int i = 0; int j = 0; int n = a.length; int m = n >>原创 2009-11-30 18:13:00 · 1077 阅读 · 0 评论 -
奇偶排序法
public class SortMethod { public static void main(String[] args) { int[] numbers = new int[]{88,77,66,55,44,33,22,11,10,8,5,5,5,96,58}; numbers=SortMethod.oddEvenSort(nu原创 2009-11-24 19:18:00 · 1024 阅读 · 0 评论 -
二分查找法
无序数组允许重复不允许重复查找N次比较,O(N)N/2次比较,O(N)添加一次移动,O(1)一次移动,O(1)删除N次比较,多余N/2次移动,N/2次比较,N/2次移动,有序数组允许重复原创 2009-11-23 16:21:00 · 867 阅读 · 0 评论 -
数据结构概况比较
源于一本数据结构教材,写上方便择优选择数据结构使用。数据结构优点缺点数组插入快,得知下标可以快速存取查找删除慢,大小固定有序数组比无序数组查找快删除插入慢,大小固定栈后进先出存取存取其它项慢队列原创 2009-11-23 11:10:00 · 559 阅读 · 0 评论 -
红黑树定义
空子节点红黑规则:1:每一个节点不是红色就是黑色。(非红即黑)2:跟总是黑色。(一如既往)3:如果节点是红色的,则它的子节点必须是黑色的(反之不一定必须为真)。(知己知彼)4:从跟到叶节点或空子节点的每一条路径,必须包含相同数目的黑色节点。第四条的定义其实是同一级别高度的比较。空子节点是父的节点高度。如下的图像就是违反规则的: 实际上在原创 2008-10-05 00:45:00 · 1142 阅读 · 0 评论 -
Shell排序 Python C#
希尔排序是计算机科学家Donald L.Shell而得名。希尔排序不像快速排序那么快。因为在最坏和最理想的情况下效率差别不算太多,所以稳定性比快速排序好一些。间隔增量Knuth间隔序列。h=h*3+1递归调用可增至最大间隔数。h=(h-1)/3可以减至起点。当然还有别的序列方法:例如:h=(5*h-1)/11;序列方案可以自己制定,但是更多的专家采用非对称互质的方法。但是这样也带来了一些问题,比如原创 2008-10-05 23:07:00 · 865 阅读 · 0 评论 -
字符全排列
模仿三角函数样式的程序基本都能形成全排列集合。例如:4个点的组合---》4个点中每个点对应3个---》3个点中每个点对应2个---》其下就是一对一 全排列N-1个元素。轮换所有N个元素。重复以上步骤。 程序如下:/** * Edwin开发包 */package com.edwin.cn;import java.util.ArrayList;import java原创 2008-06-04 07:59:00 · 708 阅读 · 0 评论 -
冒泡选择插入排序算法
稳定性:重复元素在排序前后宏观相对位置基本不变即断定为稳定。 排序算法基本有序随机序稳定性冒泡比较O(N2),移动O(0)比较O(N2),移动O(N2)稳定选择比较O(N2),移动O(N)比较O(N2),移动O(N),不原创 2008-05-30 02:36:00 · 863 阅读 · 0 评论 -
二分法查找数组
二分法查找数据适合有序数组,对海量数据处理较为优秀,简单易于维护。它的运行时间与个数的比例公式为: T=K*log2(N) K为常数。例如:1~100的有序数组查询一个数据基本最多7次。log2(100);以下为程序(只写了一个,没有采用多态,如果需要自行更改):/** * Edwin开发包 */package com.edwin.cn;/** * 排序数组原创 2008-05-29 00:08:00 · 2518 阅读 · 0 评论 -
线性表
线性结构的特点:存在唯一的“第一个”数据元素;存在唯一的“最后一个”数据元素;除第一个外,每个数据元素均有且只有一个前驱元素;除最后一个外,每个数据元素均有且只有一个后驱元素;抽象类型:ADT List{数据对象:D={ai|ai属于Elemset,(i=1,2,...,n,n>=0)}数据关系:R1={i-1,ai>|ai-1,ai属于D,(i=2,3,...,n原创 2008-05-12 13:28:00 · 578 阅读 · 0 评论