vector<int > quickSort(vector<int> &t,int a,int b) { if(a>=b) return t; int i=a,j=b; int tmp,tmp2; tmp=t[a]; while (i<j) { while(i<b&&t[i+1]<tmp) i++; while(j>a&&t[j-1]>tmp) j--; if(i<j) {tmp2=t[i];t[i]=t[j];t[j]=tmp2;continue;} else {tmp2=t[a];t[a]=t[j];t[j]=tmp2;quickSort(t,a,j-1);quickSort(t,j+1,b);} } return t; }
插入排序
void insertSort(int A[],int n) { int i; for (int j=1;j<n;j++) { int key=A[j]; i=j-1; while (i>=0&&A[i]>key) { A[i+1]=A[i]; i--; } A[i+1]=key; } }
void merge(int A[],int p,int q,int r) { int n1,n2; n1=q-p+1; n2=r-q; int *L=(int *)malloc((n1+1)*sizeof(int)); int *R=(int *)malloc((n2+1)*sizeof(int)); int i,j; for (i=0;i<n1;i++) L[i]=A[p+i]; for (i=0;i<n2;i++) R[i]=A[q+i+1]; L[n1]=32767; R[n2]=32767; i=0;j=0; for (int k=p;k<=r;k++) { if (L[i]<=R[j]) { A[k]=L[i]; i++; } else { A[k]=R[j]; j++; } } return; } void mergesort(int A[],int p,int r) { if(p<r) { int q=(p+r)/2; mergesort(A,p,q); mergesort(A,q+1,r); merge(A,p,q,r); } }计数排序
void counting_sort(int A[],int B[],int k) { int i,j; int *C=(int *)malloc((k+1)*sizeof(int)); for(i=0;i<=k;i++) C[i]=0; for (j=1;j<11;j++) { C[A[j]]++; } for(i=1;i<=k;i++) C[i]+=C[i-1]; for (j=10;j>=1;j--) { B[C[A[j]]-1]=A[j]; C[A[j]]--; } }
#include <stdio.h> #include <iostream> #include <conio.h> #include <malloc.h> using namespace std; int B[10]={};//store the result int D[3][10]={};//store the splitted result of A[] int t; int A[]={-1,123,234,432,532,656,723,212,312,458,687}; void counting_sort(int k) { int i,j; int *C=(int *)malloc((k+1)*sizeof(int)); for(i=0;i<=k;i++) C[i]=0; for (j=0;j<10;j++) { C[D[t][j]]++; } for(i=1;i<=k;i++) C[i]+=C[i-1]; for (j=9;j>=0;j--) { B[C[D[t][j]]-1]=A[j+1]; C[D[t][j]]--; } for (int k=0;k<10;k++) { A[k+1]=B[k]; } } void radixsort(int A[],int d) { int scale=1; for(int i=0;i<d;i++) scale*=10; for (int j=0;j<10;j++) { int tmp; tmp=A[j+1]; tmp/=scale; D[d][j]=tmp%10; } //0代表低位 counting_sort(9); } void main() { for (t=0;t<3;t++) { radixsort(A,t); } _getche(); }
#include <stdio.h> #include <string.h> #include <iostream> #include <conio.h> using namespace std; int heap_size; int exchange(int &a,int &b) { int tmp; tmp=a;a=b;b=tmp; return 0; } int max_heapify(int A[],int i) { int l,r,largest; l=2*i; r=l+1; if (l<=heap_size&&A[l]>A[i]) { largest=l; } else largest=i; if (r<=heap_size&&A[r]>A[largest]) { largest=r; } if (largest!=i) { exchange(A[i],A[largest]); max_heapify(A,largest); } return 0; } int build_heap(int A[]) { for (int i=heap_size/2;i>0;i--) { max_heapify(A,i); } return 0; } int main() { int A[]={-1,4,13,23,2,16,8,9,5,5,11,21}; heap_size=11; build_heap(A); for (int i=heap_size;i>1;i--) { exchange(A[i],A[1]); heap_size--; max_heapify(A,1); } for (int j=1;j<=11;j++) { cout<<A[j]<<" "; } _getche(); }
快速排序,插入排序,归并排序,计数排序,基数排序,堆排序,布布扣,bubuko.com
原文:http://blog.csdn.net/daydayyup/article/details/23202089