- 浏览: 218115 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (163)
- c++ (30)
- JavaScript (30)
- java (61)
- jQuery (3)
- ACE (2)
- oracle (9)
- jni (0)
- android (2)
- shell (1)
- myeclipse (1)
- Hibernate (1)
- linux (2)
- sqlserver (2)
- windows (2)
- sql (2)
- php (2)
- css (1)
- 学习 (1)
- ExtJs (1)
- RSS (1)
- 报文 (1)
- 跟我学Spring3 (6)
- dos (1)
- server (1)
- nosql (4)
- mongodb (6)
- photoshop (1)
- WebService (2)
- 股票 (1)
- OpenGL (3)
- Spring3MVC (6)
- 生活 (1)
- struts2 (1)
- 云盘 (1)
- blog (1)
- nosql nodejs mongoose (1)
最新评论
-
sblig:
配置分片: mongo -port 27017config ...
搭建Mongodb集群:分片Sharding+副本集Replica Set -
sblig:
配置路由:mongs: 40000 40100 40200sc ...
搭建Mongodb集群:分片Sharding+副本集Replica Set -
fuanyu:
哥们,干得漂亮。。
struts2 高危漏洞修复 -
sblig:
配置列子如下
<?xml version="1 ...
跟我学Spring3 学习笔记一 -
sblig:
307622798 写道博主你好,最近在看你的js系列文章,发 ...
JavaScript 学习笔记 二 对象的访问
/***********直接插入排序***************/ void InsertSort ( Elem R[ ], int n) { // 对记录序列R[1..n]作直接插入排序。 for ( i=2; i<=n; ++i ) { if( R[i] <= R[i-1] ) { R[0] = R[i]; // 复制为监视哨 R[i] = R[i-1] for ( j=i-2; R[0] < R[j]; --j ) R[j+1] = R[j]; // 记录后移 R[j+1] = R[0]; // 插入到正确位置 } //if } } // InsertSort /***********折半插入排序***************/ void BiInsertSort (Elem R[ ], int n) { // 对记录序列R[1..n]作折半插入排序。 for ( i=2; i<=n; ++i ) { R[0] = R[i]; // 将R[i]暂存到R[0] low = 1; high = i-1; while (low<=high) { //在R[low..high]中折半查找插入的位置 m = (low+high)/2; // 折半 if (R[0] < R[m]) high = m-1; // 插入点在低半区 else low = m+1; // 插入点在高半区 } //while for ( j=i-1; j>=high+1; --j ) R[j+1] = R[j]; // 记录后移 R[high+1] = R[0]; // 插入 } // BinsertSort /***********希尔插入排序***************/ void ShellInsert ( Elem R[ ], int dk ) { // 对待排序列R作一趟希尔插入排序。本算法对直接插入算法作了以下 // 修改:1. 前后记录位置的增量是dk,而不是1; // 2. r[0]只是暂存单元,不是哨兵。当j<=0时,插入位置已找到。 for ( i=dk+1; i<=n; ++i ) if ( R[i]< R[i-dk]) { // 需将R[i]插入有序增量子表 R[0] = R[i]; // 暂存在R[0] for (j=i-dk; j>0 && R[0]< R[j]; j-=dk) R[j+dk] = R[j]; // 记录后移,查找插入位置 R[j+dk] = R[0]; // 插入 } } // ShellInsert void ShellSort (Elem R[ ], int d [ ], int t) { // 按增量序列d [0..t-1]对顺序表L作希尔排序。 for (k=0; k<t; ++t) ShellInsert(R, d[k]); // 一趟增量为d [k]的插入排序 } // ShellSort
评论
5 楼
sblig
2012-05-07
/*二叉排序树*/ BiTree SearchBST ( BiTree T , KeyType key) { //在T为根的二叉排序树中查找key,若查找成功,返回 //指向该元素结点的指针,否则返回空指针 if ( T==NULL) return(NULL); //空树,查找不成功 else if( T->data== key ) return ( T ) ; //查找成功 else if( key < (T->data)) return ( SearchBST ( T->lchild, key)); else return ( SearchBST ( T->rchild, key)); } /*改后的 SearchBST 能够返回插入位置*/ BiTree SearchBST(BiTree T , KeyType key,BiTree f,BiTree &p) { /*在指针T所指的二叉排序树中寻找关键字等于key的数据元素,若查找成功,则p指向该结点,并返回TRUE,否则p指向查找路径上访问的最后一个结点并返 回FALSE,f指向T的双亲*/ if ( T==NULL) { p=f; return(FALSE); } else if (T->data== key) { p=T; return (TRUE) ;} else if (key < (T->data)) return ( SearchBST (T->lchild, key,T,p) ); else return ( SearchBST ( T->rchild, key,T,p) ); } Status InsertBST ( BitTree T , KeyType key) { /*若在二叉排序树中不存在关键字等于key的元素, 插入该元素并返回TRUE,否则返回FALSE*/ if( !SearchBST(T,key,NULL,p) ) //查找不成功 { s = (BitTree) malloc (sizeof( BitNode)); s->data = key; s->lchild=NULL; s->rchild=NULL; if ( !p ) T = s; //被插结点为新的根结点 else if(key < T->data) p->lchild=s //将s插入左子树 else p->rchild=s; //将s插入右子树 } //if else return FALSE; } Status DeleteBST (BiTree &T, KeyType key ) { /*若二叉排序树T中存在关键字等于key的数据元素时,则删除该数据元素结点p,并返回TRUE;否则返回FALSE*/ if (!T) return FALSE; // 不存在关键字等于key的数据元素 else { if (key==T->data) ) Delete (T); // 找到关键字等于key的数据元素 else if (key< T->data ) DeleteBST ( T->lchild, key ); else DeleteBST ( T->rchild, key ); return TRUE; } } // DeleteBST
4 楼
sblig
2012-05-07
//上面的二叉树用到 void Delete ( BiTree &p ) { //从二叉排序树中删除结点p,并重接它的左或右子树 if (!p->rchild) // 右子树空则只需重接它的左子树 { q = p; p = p->lchild; free(q); } else if (!p->lchild) // 只需重接它的右子树 { q = p; p = p->rchild; free(q); } else // 左右子树均不空 { q = p; s = p->lchild; while (s->rchild) { q = s; s = s->rchild; } p->data = s->data; // s指向被删结点的前驱 if (q != p ) q->rchild = s->lchild; else q->lchild = s->lchild; // 重接*q的左子树 free(s); } } // Delete
3 楼
sblig
2012-05-07
/******************起泡排序******************/ void BubbleSort(Elem R[], int n) { // i 指示无序序列中最后一个记录的位置 i = n; while (i >1) { lastExchangeIndex = 1; for (j = 1; j < i; j++) if (A[j+1] < A[j]) { Swap(A[j],A[j+1]); lastExchangeIndex = j; } //if i = lastExchangeIndex; } // while } // BubbleSort /******************快速排序******************/ int Partition (Elem R[], int low, int high) { // 交换记录子序列R[low..high]中的记录,使枢轴记录到位,并返回其所 // 在位置,此时,在它之前(后)的记录均不大(小)于它 pivotkey = R[low]; // 用子表的第一个记录作枢轴记录 while (low<high) { // 从表的两端交替地向中间扫描 while (low<high && R[high]>=pivotkey) --high; R[low]←→R[high]; // 将比枢轴记录小的记录交换到低端 while (low<high && R[low]<=pivotkey) ++low; R[low]←→R[high]; // 将比枢轴记录大的记录交换到高端 } //while return low; // 返回枢轴所在位置 } // Partition 容易看出,调整过程中的枢轴位置并不重要,因此,为了减少记录的移动次数,应先将枢轴记录“移出”,待求得枢轴记录应在的位置之后(此时low=high),再将枢轴记录到位。 将上述“一次划分”的算法改写如下: int Partition (Elem R[], int low, int high) { // 交换记录子序列R[low..high]中的记录,使枢轴记录到位,并返回其所 // 在位置,此时,在它之前(后)的记录均不大(小)于它 R[0] = R[low]; // 用子表的第一个记录作枢轴记录 pivotkey = R[low]; // 枢轴记录关键字 while (low<high) { // 从表的两端交替地向中间扫描 while(low<high && R[high]>=pivotkey) --high; R[low] = R[high]; // 将比枢轴记录小的记录移到低端 while (low<high && R[low]<=pivotkey) ++low; R[high] = R[low]; // 将比枢轴记录大的记录移到高端 } R[low] = R[0]; // 枢轴记录到位 return low; // 返回枢轴位置 } // Partition void QSort (Elem R[], int low, int high) { // 对记录序列R[low..high]进行快速排序 if (low < high) { // 长度大于1 pivotloc = Partition(L, low, high); // 将L.r[low..high]一分为二 QSort(L, low, pivotloc-1); // 对低子表递归排序,pivotloc是枢轴位置 QSort(L, pivotloc+1, high);// 对高子表递归排序 } } // Qsort void QuickSort ( Elem R[ ], int n) { // 对记录序列进行快速排序 QSort(R, 1, n); } // QuickSort
2 楼
sblig
2012-05-07
/******************归并排序******************/ void Merge (Elem SR [ ], Elem TR [ ], int i, int m, int n) { // 将有序的SR[i..m]和SR[m+1..n]归并为有序的TR[i..n] for (j=m+1, k=i; i<=m && j<=n; ++k) { // 将SR中记录由小到大地并入TR if ( SR[i] <= SR[j] ) TR[k] = SR[i++]; else TR[k] = SR[j++]; } if (i<=m) TR[k..n] = SR[i..m];//将剩余的SR[i..m]复制到TR if (j<=n) TR[k..n] = SR[j..n];//将剩余的SR[j..n]复制到TR } // Merge void Msort ( Elem SR[], Elem &TR1[], int s, int t ) { // 将SR[s..t]进行2-路归并排序为TR1[s..t]。 if (s==t) TR1[s] = SR[s]; else { m = (s+t)/2; // 将SR[s..t]平分为SR[s..m]和SR[m+1..t] Msort (SR, TR2, s, m); // 递归地将SR[s..m]归并为有序的TR2[s..m] Msort (SR, TR2, m+1, t); //递归地SR[m+1..t]归并为有序的TR2[m+1..t] Merge (TR2, TR1, s, m, t); // 将TR2[s..m]和TR2[m+1..t]归并到TR1[s..t] } //else } // Msort void MergeSort (Elem R[]) { // 对记录序列R[1..n]作归并排序。 MSort(R, R, 1, n); } // MergeSort
1 楼
sblig
2012-05-07
/******************简单选择排序******************/ void SelectSort ( Elem R[ ],int n ) { for ( i=1; i<= n-1; i++) //选择第i小的记录,并交换到位 { k=i; for ( j=i+1 ; j<= n ; ++j) if ( R[j] < R[k] ) k=j; if ( k != i) Swap(R[i], R[k] ); } //for } //SelectSort /********************堆排序*********************/ void HeapAdjust (Elem R[ ], int s, int m) //一次筛选 { // 已知R[s..m]中记录的关键字除R[s]之外均满足堆的定义, // 本函数调整R[s] 的关键字,使R[s..m]成为一个大顶堆 rc = R[s]; for ( j=2*s; j<=m; j*=2 ) { // 沿key较大的孩子结点向下筛选 if ( j<m && R[j]<R[j+1] ) ++j;// j为key较大的记录的下标 if ( rc >= R[j] ) break; // rc应插入在位置s上 R[s] = R[j]; s = j; } R[s] = rc; // 插入 } // HeapAdjust void HeapSort ( Elem R[ ], int n ) { // 对记录序列R[1..n]进行堆排序。 for ( i=n/2; i>0; --i ) // 把R[1..n]建成大顶堆 HeapAdjust ( R, i, n ); for ( i=n; i>1; --i ) { R[1]←→R[i]; // 将堆顶记录和当前未经排序子序列 //R[1..i]中最后一个记录相互交换 HeapAdjust(R, 1, i-1); // 将R[1..i-1] 重新调整为大顶堆 } } // HeapSort
发表评论
-
OpenGL 图形编程 学习笔记 三
2013-01-04 13:54 1815[2012-12-31 16:53] openGL笔记 ... -
OpenGL 图形编程 学习笔记 二
2013-01-04 13:48 1181[2012-12-31 16:38] OpenGL ... -
OpenGL 图形编程 学习笔记 一
2013-01-04 13:45 1094[2012-12-31 16:15] OpenGL学习笔 ... -
Boost 学习笔记 第一天
2012-12-07 10:50 9701. timer.hpp timer接口简单,轻 ... -
“工业级” 断言
2012-09-06 12:30 960class Assert { public: A ... -
算法学习 之遍历
2012-05-22 14:22 1070/********************广度优先遍历算 ... -
算法学习 之链表
2012-05-22 13:52 974/**********开放定址哈希表的存储结构***** ... -
算法学习 之查询
2012-05-22 11:45 860/******************顺序查找***** ... -
日常开发有用标签 五
2012-04-11 10:42 877linux cmd Mr__zh ... -
日常开发有用标签 四
2012-04-11 10:38 751java I/O 深入分析 Java ... -
日常开发有用标签 三
2012-04-11 10:37 855java thread java并发编程- ... -
日常开发有用标签 二
2012-04-11 10:35 662java 100个Java经典例子(41- ... -
日常开发有用标签 一
2012-04-11 10:31 911工具 Linux 常用C函数(中文版) ... -
C++ Primer 笔记七
2012-03-27 16:15 865每个类都定义了一个接口和一个实现。接口由使用该类的代码需要执行 ... -
C++ Primer 笔记六
2012-03-07 14:38 799typedef 通常被用于以下三种目的: 1.为了隐藏特定类型 ... -
C++ Primer 笔记五 引用(const)1
2012-02-24 17:50 1219定义 const 对象常量在定义后就不能被修改,所以定义时必须 ... -
C++ Primer 笔记四
2012-02-22 15:38 10091.内置类型变量是否自动初始化取决于变量定义的位置。在函数体外 ... -
C++ Primer 笔记三
2012-02-22 12:53 843初始化变量定义指定了变量的类型和标识符,也可以为对象提供初始值 ... -
C++ Primer 笔记二
2012-02-16 16:09 894/* * main.cpp * Created on ... -
C++ Primer 笔记一
2012-02-16 16:08 896/* * main.cpp * Created on ...
相关推荐
该程序包含7大排序算法: # sort.bubbleSort() #冒泡排序 # sort.shellSort() #希尔排序 ...该排序算法把每次的排序结果都列出来,可供初学者学习。 self.arr存放的是待排序列表,可改成自己的数据
呵呵,传上来供大家学习使用~8种排序算法 包括:选择排序 冒泡排序 快速排序 等~~
Java数据结构与算法学习笔记之排序 冒泡排序,选择排序,插入排序,希尔排序, 归并排序, 快速排序.
易语言算法学习 分组插入排序。@易语言学习论坛。
自己刚刚开始学习排序算法,第一个排序算法:冒泡排序。以及在学习过程中做的一些笔记。
舞动的排序算法 快速排序 通过动画演示快速排序,很好的学习,课程资源。
排序算法学习报告.doc
数据结构与算法之内部及外部排序算法的学习
排序的基本概念以及其算法的种类,介绍几种常见的排序算法的算法:冒泡...在研究学习了之前几种排序算法的基础上,讨论发现一种新的排序算法,并通过了进一步的探索,找到了新的排序算法较之前几种算法的优势与不足。
学习数组使用,用数组下标进行选择排序,用双循环实现选择排序。 选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理是:第一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的...
本资源适合数据结构与算法学习者和考生使用,帮助他们通过项目实践来加深对冒泡排序算法的理解和掌握,提高编程的能力和水平。 提供了多种算法演示和验证的功能,如输入和输出待排序的数据,显示冒泡排序的过程和...
此排序算法为本人平常学习练习所写,在学习的过程中也是非常希望和大家分享交流
将排序学习融入推荐算法中,研究如何整合大量用户和物品的特征,构建更加贴合用户偏好需求的用户模型,以提高推荐算法的性能和用户满意度,成为基于排序学习推荐算法的主要任务.对近些年基于排序学习的推荐算法研究进展...
本资源包含《数据结构》考研的九种内部排序算法考点的算法代码及排序过程图示,以表格、图文方式详细讲解每一种...适用范围:考研党,想要学习排序算法的人员,在校大学生等。 资源难度:初级。(易于学习人员理解)
个人算法学习笔记
八大排序算法,排序算法是比较初级的算法,在学习排序算法的同时有助于我们去理解数据结构,熟练掌握C++语法规则
在初学C语言时,比较重要的知识点就是排序算法,这里提供了一种插入排序算法的实现路径,供广大学习者参考。
在初学C语言时,比较重要的知识点就是排序算法,这里提供了一种选择排序算法的实现路径,供广大学习者参考。
在初学C语言时,比较重要的知识点就是排序算法,这里提供了一种冒泡排序算法的实现路径,供广大学习者参考。