快速排序 冒泡排序 归并排序 堆排序 的主要代码

来源:互联网 发布:用户数据加密存储模块 编辑:程序博客网 时间: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
原创粉丝点击