快速排序 冒泡排序 归并排序 堆排序 的主要代码
来源:互联网 发布:用户数据加密存储模块 编辑:程序博客网 时间:2024/06/11 09:13
//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 sortedvoid 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;
}
0 0
- 快速排序 冒泡排序 归并排序 堆排序 的主要代码
- 冒泡排序、归并排序、快速排序、堆排序
- 快速排序,归并排序,堆排序的java代码实现
- 基本的排序算法:冒泡排序、插入排序、希尔排序、选择排序、归并排序、快速排序、堆排序
- 插入排序、冒泡排序、选择排序、Shell排序、快速排序、归并排序、堆排序
- C# 插入排序 冒泡排序 选择排序 快速排序 堆排序 归并排序 基数排序 希尔排序
- 冒泡排序 快速排序 选择排序 堆排序 直接插入排序 希尔排序 归并排序
- 冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序java实现
- 插入排序、希尔排序、冒泡排序、快速排序、选择排序、堆排序、归并排序
- 冒泡排序,插入排序,快速排序,归并排序,堆排序,选择排序,希尔排序
- 几种基本排序的实现:选择排序,冒泡排序,插入排序,堆排序,快速排序,归并排序
- 插入排序、冒泡排序、选择排序、希尔排序、快速排序、归并排序、堆排序和LST基数排序的C++代码实现
- 冒泡、插入、归并、堆排序、快速排序的Java实现代码
- 插入排序、冒泡排序、选择排序、快速排序、堆排序、归并排序算法比较
- 冒泡排序,选择排序,插入排序,堆排序,归并排序,快速排序
- 冒泡排序,快速排序,归并排序,选择排序,插入排序,堆排序
- 冒泡排序、插入排序、计数排序、归并排序、快速排序、堆排序
- 快速排序 选择排序 插入排序 冒泡排序 堆排序 归并排序 基数排序
- POJ 1488 TEX Quotes(水~)
- leetCode(22):Binary Tree Level Order Traversal II
- [安卓]手机管家(十三)通讯卫士之listview优化
- SharePoint Server 2016更新之(二,三)受云端影响的架构,合规和报告
- 我该如何理解进程与页之间是什么关系???
- 快速排序 冒泡排序 归并排序 堆排序 的主要代码
- Shell逐行读取文件的4种方法
- “上善若水,厚德载物”七善二十四德
- 股票领悟
- ionic AngularJS-设定ion-scroll div 动态高度
- 英语学习的一些高级句型
- 点击屏幕空白实现键盘回收的几种方法
- Nmap 源码学习三 nmap_main主程序分析
- javascript原型链与特权方法