白话经典算法系列之一 冒泡排序的三种实现

白话经典算法系列之一 冒泡排序的三种实现
在CSDN看到的白话算法,不错,认真阅读了一边感觉有用,修改和完善了部分代码,版权为:MoreWindows,如果作者不希望本站转载,发EMAIL致10814750#qq.com,谢谢! 冒泡排序是非常容易理解和实现,,以从小到大排序举例: 设数组长度为N。 1.比较相邻的前后二个数据,如果前面数据大于后面的数据,就将二个数据交换。 2.这样对数组的第0个数据到N-1个数据进行一次遍历后,最大的一个数据就“沉”到数组第N-1个...

链式队列

链式队列
链式队列的抽象数据类型,链式队列数据结构实现代码: 链式队列,front头指针,rear尾指针,QNode为单个元素结点 [cpp] struct QNode { ElemType data; QNode *next; }; struct Queue { QNode front; QNode rear; }; void Init(Queue &Q) { Q.front=Q.rear=new QNode;//头结点 Q.front->next=NULL; } void Destory(Queue &Q) { while(Q.front) { Q.rear=Q.front->next; delete Q.front; Q.front...

循环队列

循环队列
循环队列的抽象数据类型,循环队列数据结构实现代码: 循环队列,front头指针,rear尾指针,queue申请内存 [cpp] #define MaxSize 100 struct Queue { ElemType *queue; int front,rear; }; void Init(Queue &Q) { Q.queue=new Queue[MaxSize]; Q.front=Q.rear; } int Length(Queue Q) { return (Q.rear-Q.front+MaxSize)%MaxSize; } bool Insert(Queue &Q,ElemType t) { if((Q.rear+1)%MaxSize==Q....

递归全排列

递归全排列
题目:编写一个递归算法,输出n个元素的全排列,例如:3个元素1,2,3 全排列为:1 2 3   1 3 2   2 1 3   2 3 1    3 2 1   3 1 2! [cpp] #include <iostream> using namespace std; void permute(int a[],int s,int n) { int i,temp; if(s==n-1) { for(i=0;i<n;i++) cout<<a[i]<<" "; cout<<endl; } else for(i=s;i<n;i++) { temp=a▼;a▼=a[i];a[i]=temp; permute(a,s+1,n); tem...

逆波兰式

逆波兰式
逆波兰式,也叫后缀表达式(将运算符写在操作数之后)! 利用STL栈将中缀表达式转换成后缀表达式 [cpp] #include <iostream> #include <string> #include <stack> using namespace std; int first(char ch) { switch(ch) { case '+': case '-':return 1; case '*': case '/':return 2; case '(': case '@': default: return 0; } } void change(string &s1,string &s2) { stack<c...

归并排序(分治)

归并排序(分治)
归并排序,模型如下: if low<high then mid<-[n/2] call mergesort(low,mid); call mergesort(mid+1,high); call merge(low,mid,high); endif end mergesort 示例程序: [cpp] #include <iostream> using namespace std; long long cnt; int a[1000010]; void merge(int s1,int e1,int s2,int e2) { int p1=s1,p2=s2,p=0,*t; t=new int[e2-s1+5]; while(p1<=e1&&p2<=e2) { if(a[p...

栈
栈实现,栈链式,栈顺序,栈链式存储,栈顺序存储,栈实现代码,栈数据结构实现,栈c/c++实现,其实大家可以直接调用stl栈! 抽象数据类型: [cpp] void InitStack(SNode *&HS) { HS=NULL; } void Push(SNode *&HS,ElemType item) { SNode *newpt=new SNode; newpt->data=item; newpt->next=HS; HS=newpt; } ElemType Pop(SNode *&HS) { //检测空否?处理 SNode *p=HS; HS=HS->next; ElemType te...

分治法

分治法
道家:"一生二,二生三,三生万物!"--《道德经》 分治二分检索 [cpp] //二分检索算法,查找元素520是否在数列中,是'YES',否'NO'; #include <iostream> using namespace std; int main() { int n,*p; cout<<"输入元素个数:";cin>>n; p=new int[n]; for(int i=0;i<n;i++) cin>>p[i]; int low=0,high=n-1,mid,number=0; while(low<=high) { mid=(low+high)/2; if(p[mid]<520) l...

集合

集合
集合实现,集合链式,集合顺序,集合链式存储,集合顺序存储,集合实现代码,集合数据结构实现,集合c/c++实现 1.集合的顺序存储结构 [cpp] struct Set { ElemType *set; int len; int MaxSize; }; void InitSet(Set &S)//初始化集合 { S.MaxSize=10; S.set=new ElemType[10]; if(!S.set) { cout<<"memory is use up!"<<endl; exit(1); } S.len=0; } void ClearSet(Set &S)//清空集合 { if(S....

线性表

线性表
线性表,线性表实现,线性表,线性表链式,线性表顺序存储,线性表链表,线性表数组 顺序表包括两种存储方式: 1.顺序存储,随机读取(顺序表). 2.随机存储,顺序读取(链式表) [cpp] //1.顺序存储 //顺序存储线性表 #include <iostream> #include <stdlib.h> using namespace std; typedef int ElemType; struct List { ElemType *list; int size; int MaxSize; }; void InitList(List &L)//初始化...
Copyright © C/C++程序员之家 保留所有权利.   Theme  Ality 浙ICP备15011757号-3

用户登录