快速排序 冒泡排序 归并排序 堆排序 的主要代码
2015-06-22 09:12
573 查看
//sort [l,r] in a /**************************************************/ void selectSort(int*a,int l,int r){ for(int mi; l<r; ++l){ int mi=l; for(int i=l+1; i<=r; ++i) if(a[i]<a[mi]) mi=i; swap(a[l],a[mi]); } } /**************************************************/ // intervals [l,m] [m+1,r] are already sorted void merge(int *a,int l,int m,int r){ int tmp[r-l+1]; for(int i=l,j=m+1,k=0; k<=r-l; ++k){ if(i>m) tmp[k]=a[j++]; else if(j>r) tmp[k]=a[i++]; else tmp[k]= a[i]<a[j]?a[i++]:a[j++]; } for(int i=0;i<r-l+1;++i) a[l+i]=tmp[i]; } void mergeSort(int *a,int l,int r){ if(l>=r)return; int mid=l+(r-l)/2; mergeSort(a,l,mid); mergeSort(a,mid+1,r); merge(a,l,mid,r); } /**************************************************/ void bubbleSort(int *a,int l,int r){ for(; l<r; r--) for(int i=l; i<r; ++i) if(a[i] > a[i+1]) swap(a[i],a[i+1]); } /**************************************************/ void insertSort(int*a,int l,int r){ for(int i=l+1; i<=r; ++i) { int x= a[i],j=i-1; for( ;j>=0 && a[j]>x; --j) a[j+1]=a[j]; a[j+1]=x; } } /**************************************************/ int partition(int *a,int l, int r){ int i, j; for( i=l-1, j=l; j<r; ++j) if( a[j] < a[r] ) swap(a[++i] , a[j]); swap(a[i+1], a[r]); return i+1; } void quickSort(int *a,int l,int r){ if(l>=r)return; int mid=partition(a,l,r); quickSort(a,l,mid-1); quickSort(a,mid+1,r); } /*****************maximum_heap*********************/ void heapDown(int *a, int i,int n){ while(true){ int minIdx=i, lch=2*i+1, rch=lch+1; if(lch<n && a[lch]>a[minIdx]) minIdx=lch; if(rch<n && a[rch]>a[minIdx]) minIdx=rch; if(minIdx==i) break; swap(a[i] ,a[minIdx]); i=minIdx; } } void heapUp(int* a , int i, int n){ while(true){ int parent=(i-1)/2; if(parent<0)break; if(a[i] <=a[parent]) break; swap(a[i], a[parent]); i=parent; } } void meakHeap(int *a, int n){ for(int i=(n-2)/2; i>=0; --i) heapDown(a,i,n); } void heapSort(int *a,int n){ meakHeap(a,n); while(n>1){ swap(a[n---1], a[0]); heapDown(a,0,n); } } <pre name="code" class="cpp">/*****************priority_queue*********************/struct priorityQueue{
int siz=0;
int val[1000];
void push(int );
int pop();
};
void priorityQueue:: push(int x){
val[siz++]=x;
heapUp(val, siz-1,siz);
}
int priorityQueue:: pop(){
assert(siz>0);
int ret=val[0];
swap(val[0], val[siz---1]);
heapDown(val,0,siz);
return ret;
}
相关文章推荐
- C语言常用的几个算法
- input demo in Java
- 编程之美 3.3计算字符串的相似度
- DB2 存储过程 - 利用 dbms_output.put_line 输出至屏幕
- Java知多少(100)图像处理基础
- Arrays数组。。
- c#中用DirectShow实现媒体播放器的核心(1) DirectShow简介
- c#中用DirectShow实现媒体播放器的核心(1) DirectShow简介
- Java--Reflect(反射)专题4——获取成员变量以及构造函数信息
- [C++ primer]第二章笔记--变量和基本类型
- 《C#高级编程》【第7章】运算符与类型强制转换 -- 学习笔记
- Struts2返回JSON数据的具体应用范例
- BigDecimal练习。。
- PHP 标记风格
- socket编程与利用进程进行多并行连接
- 怎么从代码中拿到栈回溯信息(call stack trace)
- 信管c++综合设计
- DecimalFormat练习。。
- 【面试】【Spring常见问题总结】【01】
- Lua 与C/C++ 交互系列: Lua调用C/C++函数(4-2)