数据结构与算法
詹詹自喜KING
MLR
展开
-
排序算法小结(未完)
排序算法稳定性概念:假定在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变,即在原序列中,ri=rj,且ri在rj之前,而在排序后的序列中,ri仍在rj之前,则称这种排序算法是稳定的;否则称为不稳定的。 堆排序、快速排序、希尔排序、直接选择排序是不稳定的排序算法,而基数排序、冒泡排序、直接插入排序、折半插入排序、归并排序是稳定的排序算法。 1.冒泡排原创 2016-09-09 18:49:07 · 338 阅读 · 0 评论 -
Java常用排序算法之堆排序
public class HeapSort { static final int SIZE = 10; public static void main(String[] args) { int arr[] = new int[SIZE]; for (int i = 0; i < arr.length; i++) { arr[i]原创 2016-06-10 16:08:13 · 407 阅读 · 0 评论 -
Java常用排序算法之快速排序
快速排序(Quicksort):是对冒泡排序的一种改进。 快速排序由C. A. R. Hoare在1962年提出。它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 一趟快速排序的算法是: 1)设置两个变量i、j,排序开始的时候:原创 2016-06-02 15:33:28 · 420 阅读 · 0 评论 -
Java常用排序算法之希尔排序
希尔排序(Shell Sort):是插入排序的一种。也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本。希尔排序是非稳定排序算法。该方法因DL.Shell于1959年提出而得名。 希尔排序是把记录按下标的一定增量分组,对每组使用直接插入排序算法排序;随着增量逐渐减少,当增量减至1时,整个文件恰被分成一组,算法便终止。步骤: 将N个元素的数组分成N/2个数字序列,第i个数据和第N/2+i个原创 2016-06-02 13:31:08 · 554 阅读 · 0 评论 -
Java常用排序算法之插入排序
插入排序(Insertion Sort):通过对未排序的数据逐个插入至已排好的数据中的合适位置。 步骤: 首先对数组的前两个数据进行从小到大排序 将第三个数据先与第二个数据比较,大就排在第三个,小就与第一个数据比,同时原第二个数据索引往后移一个;如果比第一个大就其放在第二位,比第一个小就继续往前移放在第一位,同时原第一个数据索引往后移一个。 将第四个数据按照上述规则插入到前面排好的三个数之间原创 2016-06-02 01:35:25 · 325 阅读 · 0 评论 -
Java常用排序算法之选择排序
选择排序(Selection sort):是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。 步骤: 首先从有n个数据的原始数组中通过依次比较找到最小的数据,将其先赋值给中间变量arr[index] 再将arr[index]与arr[0]交换 接着从剩下的(n-1)个数据中再找到最小的数据,将其原创 2016-06-01 21:36:30 · 240 阅读 · 0 评论 -
Java常用排序算法之冒泡排序
之前由于准备考试,好久没有写点东西了,感觉少了点什么。最近在看有关java常用的几种算法,想通过参考书按照自己的理解记录一下。 冒泡排序(Bubble Sort):是所有排序算法中较简单和基本的一种,通过多次比较和交换实现排序。这个算法的名字由来是因为越大的元素会经由交换慢慢“浮”到数列的顶端,故名。 流程: 1.对有n个数据的数组,依次比较相邻的两个数据的大小 2.如果前面的数据大于后面原创 2016-06-01 21:14:07 · 414 阅读 · 0 评论 -
分治算法
分治算法的基本思想是将一个规模为N的问题分解为K个规模较小的子问题,这些子问题相互独立且与原问题性质相同。求出子问题的解,就可得到原问题的解。即一种分目标完成程序算法,简单问题可用二分法完成。 分治法解题的一般步骤: (1)分解,将要解决的问题划分成若干规模较小的同类问题; (2)求解,当子问题划分得足够小时,用较简单的方法解决; (3)合并,按原问题的要求,将子问题的解逐层合并构成原问题的原创 2016-09-03 12:22:32 · 304 阅读 · 0 评论 -
概率算法思想
蒙特卡罗求圆周率import java.util.Scanner;public class Z { public static void main(String[] args) { long n;double pi; Scanner sc=new Scanner(System.in); System.out.println("输入点的数量n=");原创 2016-09-05 16:48:12 · 425 阅读 · 0 评论 -
分治算法
分治法所能解决的问题一般具有以下几个特征: 1) 该问题的规模缩小到一定的程度就可以容易地解决 2) 该问题可以分解为若干个规模较小的相同问题,即该问题具有最优子结构性质。 3) 利用该问题分解出的子问题的解可以合并为该问题的解; 4) 该问题所分解出的各个子问题是相互独立的,即子问题之间不包含公共的子子问题。 第一条特征是绝大多数问题都可以满足的,因为问题的计算复杂性一般是随着问题规模的原创 2016-09-17 00:14:09 · 363 阅读 · 0 评论 -
动态规划——在做题中理解你的美
一、求数组最大子数组和 子数组必须是连续的,数组中可能包含有:正整数,零,负整数三种中的一种或多种。 方法一:可以用普通的方法枚举所有的连续子数组,然后求出最大的子数组和,时间复杂度为O(n*n)。 方法二:动态规划! 方法一代码:int MaxSubString(int[] A, int n){ int max = min; //初始值为负无穷大 int sum; for(原创 2016-09-16 14:18:24 · 352 阅读 · 0 评论 -
栈结构、队列
栈结构是一种线性结构,又可分为顺序栈结构和链式栈结构,栈结构只能在一端进行操作,称之为栈顶,另一端为栈底,遵循后进先出的原则。栈结构只有栈顶元素可以访问。一般操作有入栈(PUSH)和出栈(POP)。 队列结构是一种线性结构,又可分为顺序队列结构和链式队列结构,队列结构只能在一端进行删除操作,称之为队头,在另一端进行插入操作,称为为队尾,遵循先进先出的原则。一般操作有入队列(将一个元素插入到队尾)和原创 2016-09-02 16:40:37 · 254 阅读 · 0 评论 -
用JAVA实现顺序表
顺序表演示package date;import java.util.Scanner;//顺序表数据元素类Dateclass Date { // 模拟一个班级的学生记录 String key; String name; int age;}class SLType { static final int MAXLEN =原创 2016-09-02 16:08:38 · 2530 阅读 · 0 评论 -
递推算法
相对于递归算法,递推算法免除了数据进出栈的过程,也就是说,不需要函数不断的向边界值靠拢,而直接从边界出发,直到求出函数值. 比如阶乘函数:f(n)=n*f(n-1) 在f(3)的运算过程中,递归的数据流动过程如下: f(3){f(i)=f(i-1)*i}–>f(2)–>f(1)–>f(0){f(0)=1}–>f(1)–>f(2)–f(3){f(3)=6} 而递推如下: f(0)–>f(1)原创 2016-09-03 00:09:46 · 406 阅读 · 0 评论 -
递归算法
递归算法是把问题转化为规模缩小了的同类问题的子问题。然后递归调用函数(或过程)来表示问题的解。 一个过程(或函数)直接或间接调用自己本身,这种过程(或函数)叫递归过程(或函数). 编写递归调用方法时必须使用if语句强制方法在未执行递归调用前返回!!!(要有终止处,不能无限递归) 1.阶乘import java.util.Scanner;public class JieC { publi原创 2016-09-02 23:06:50 · 238 阅读 · 0 评论 -
穷举算法
穷举法的基本思想是根据题目的部分条件确定答案的大致范围,并在此范围内对所有可能的情况逐一验证,直到全部情况验证完毕。若某个情况验证符合题目的全部条件,则为本问题的一个解;若全部情况验证后都不符合题目的全部条件,则本题无解。穷举法也称为枚举法。 1.鸡兔同笼:共35个头,94只脚,问鸡兔分别有多少?import java.util.Scanner;public class Pl { stat原创 2016-09-02 22:50:33 · 854 阅读 · 0 评论 -
Java常用排序算法之合并排序
合并排序(merge sort):是建立在归并操作上的一种有效的排序算法。该算法是采用分治法的一个非常典型的应用。合并排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为2-路归并。合并排原创 2016-06-13 16:02:09 · 1056 阅读 · 0 评论