数据结构
文章平均质量分 68
xiaokang06
这个作者很懒,什么都没留下…
展开
-
插入排序---java实现
package sfdl; public class InsertionSort { public static void main(String[] args) { int[] A={5,2,4,6,1,3}; for(int j = 1; j < A.length; j++) { int key = A[j]; int i = j - 1; whi原创 2012-02-28 13:17:57 · 370 阅读 · 0 评论 -
Java程序员必须掌握的8大排序算法
本文主要详解了Java语言的8大排序的基本思想以及实例解读,详细请看下文 8种排序之间的关系: 1, 直接插入排序 (1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排 好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数 也是排好顺序的。如此反复循环,直到全部排好顺序。 (2)实例 (3)用java实现原创 2015-07-20 17:49:44 · 591 阅读 · 0 评论 -
Trie树(字典树)
1. Trie树 Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较,查询效率比哈希表高。 Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。 它有3个基本性质: 根转载 2015-07-20 17:45:53 · 439 阅读 · 0 评论 -
二叉树遍历的前驱和后继规则说明
二叉树遍历的递归算法和非递归算法我们当然应该很熟悉了,不过还有另外一种遍 历方式,就是增加了树的构造,然后不允许递归或是用到栈进行遍历,如线索树或者是 有父母节点的二叉树等等等等。这样的遍历就需要我们找到一个节点的后继,同样如果 有更变态的题要求我们找一个节点的前驱,也和找后继是一个类型,下面我就关于三种 遍历方法的前驱和后继作一讨论和总结,让大家在考试的时候得心应手。也请高手给与 指正 一、前序转载 2014-03-25 19:51:22 · 6911 阅读 · 4 评论 -
常用排序算法总结
排序算法总结: 选择排序:对于长度为N的数组,选择排序需要大约N2/2词比较和N次交换。 插入排序:对于随机排列的长度为N且主键不重复的数组: (1)平均情况下,需要~N2/4次比较以及~ N2/4次交换。 (2)最坏情况下,需要~N2/2次比较以及~ N2/2次交换 (3)最好情况下,需要N-1次比较以及0次交换 特点:插入排序,所需的时间取决于输入中元素的初始顺序。对部分有序的数组原创 2014-03-19 20:59:19 · 555 阅读 · 0 评论 -
全排列算法及实现
全排列在很多程序都有应用,是一个很常见的算法,常规的算法是一种递归的算法,这种算法的得到基于以下的分析思路。 给定一个具有n个元素的集合(n>=1),要求输出这个集合中元素的所有可能的排列。 一、递归实现 例如,如果集合是{a,b,c},那么这个集合中元素的所有排列是{(a,b,c),(a,c,b),(b,a,c),(b,c,a),(c,a,b),(c,b,a转载 2012-09-05 21:45:20 · 819 阅读 · 0 评论 -
给定一个字符串,求出其最长的重复子串
1、给定一个字符串,求出其最长的重复子串。 思路:使用后缀数组,对一个字符串生成相应的后缀数组后,然后再排序,排完序依次检测相邻的两个字符串的开头公共部分。 这样的时间复杂度为: 生成后缀数组 O(N) 排序 O(NlogN*N) 最后面的 N 是因为字符串比较也是 O(N) 依次检测相邻的两个字符串 O(N * N) 总的时间复杂度是 O(N^2*logN),转载 2012-09-05 21:27:48 · 1205 阅读 · 0 评论 -
折半查找C++实现
#include using namespace std; int binSearch(int *list, int key, int n) { //key表示需要查找的元素 n表示数组的大小 int low, mid, high; low = 0; high = n-1; while(low <= high) { mid = (low + high)/2;原创 2012-08-22 15:51:13 · 892 阅读 · 0 评论 -
排序算法--选择排序C++实现
#include using namespace std; void chooseSort(int *list, int n) { for(int i = 0; i < n-1; i++) { int k = i; //k用来记录最小元素的编号 for(int j = i +1; j < n; j++) { if(list[j] < list[k]) {原创 2012-08-22 15:23:26 · 293 阅读 · 0 评论 -
排序算法--希尔排序C++实现
#include using namespace std; void shellSort(int *list, int len) { int d = len; while(d > 1) { d = (d + 1)/2; //增量 for(int i = 0; i < len - d; i++) { if(list[i+d] < list[i]) {原创 2012-08-22 15:22:00 · 410 阅读 · 0 评论 -
排序算法--冒泡排序C++实现
实现方法一: #include using namespace std; void bubbleSort2(int *list, int n) { int i, j, temp; bool exchange; //½»»»±êÖ¾ for(i = 0; i < n; i++ ) {//×î¶à½»»»n-1´Î exchange = false; for(j =原创 2012-08-21 21:23:52 · 452 阅读 · 0 评论 -
排序算法---快速排序c++实现
#include using namespace std; void quicksort(int *list, int s, int t) { if(s < t) { int i = s, j = t; int pivot = list[i]; //枢轴元素 while(i < j) { //从右左扫描 while(i = pivot) {原创 2012-08-21 17:16:30 · 572 阅读 · 0 评论 -
数据结构之顺序队列的操作(C语言)
#include #include #include #define QUEUELEN 15 //数据结构的定义 typedef struct { char name[10]; int age; }DATA; typedef struct { DATA data[QUEUELEN]; int head; int tail; }SQType;原创 2012-08-17 16:39:34 · 917 阅读 · 0 评论 -
数据结构之顺序栈的操作(C语言)
#include #include #include #define MAXLEN 50 typedef struct { char name[10]; int age; }DATA; typedef struct stack { DATA date[MAXLEN+1]; int top; }StackType; //栈的初始化 StackTy转载 2012-08-17 16:42:46 · 875 阅读 · 0 评论 -
用字符串模拟两个大数相加——java实现
转自:http://www.cnblogs.com/0201zcr/p/4906283.html 问题: 大数相加不能直接使用基本的int类型,因为int可以表示的整数有限,不能满足大数的要求。可以使用字符串来表示大数,模拟大数相加的过程。 思路: 1.反转两个字符串,便于从低位到高位相加和最高位的进位导致和的位数增加; 2.对齐两个字符串,即短字符转载 2017-03-25 17:33:26 · 2178 阅读 · 0 评论