几种排序的源代码

来源:互联网 发布:js输入框输入触发事件 编辑:程序博客网 时间:2024/05/17 07:26
void bubble_sort(int* a,int len){int up=0;int down=len-1;int i,temp;while(up<down){for(i=up+1;i<down;i++){if(a[i-1]>a[i]){temp=a[i-1];a[i-1]=a[i];a[i]=temp;}}for(i=down-1;i>=up;i--){if(a[i]>a[i+1]){temp=a[i+1];a[i+1]=a[i];a[i]=temp;}}up++;down--;}}void insert_sort(int* a,int len)//基本思想在已经排好序的数组里插入元素{int i,j,tmp;for(i=1;i<=len-1;i++){tmp=a[i];for(j=i-1;j>=0;j--){if(a[j]>=tmp){a[j+1]=a[j];}else{break;}}a[j+1]=tmp;}}void quick_sort(int* a,int start,int end){if(a==NULL||start>=end)return;int i,j,mid,key,tmp,pos;i=start;j=end;mid=(start+end)/2;key=a[mid];pos=mid;while(i<j){while(a[i]<=key&&i<pos){i++;}if(a[i]>key){tmp=a[pos];a[pos]=a[i];a[i]=tmp;pos=i;}while(a[j]>=key&&j>pos){j--;}if(a[j]<key){tmp=a[pos];a[pos]=a[j];a[j]=tmp;pos=j;}}quick_sort(a,start,pos-1);quick_sort(a,pos+1,end);}//////////////////////////////////////////////////////////////////////////////////////////void adjustdown(int* a,int p,int end){int left,i,tmp;left=2*p+1;i=p;while(left<=end){if(left+1>end&&a[left]<=a[i]){break;}else if(left+1<=end&&a[i]>=a[left]&&a[i]>=a[left+1]){break;}else if(left+1>end&&a[left]>a[i]){tmp=a[left];a[left]=a[i];a[i]=tmp;i=left;left=2*i+1;}else if(left+1<=end&&a[i]<a[left]&&a[left+1]<=a[left]){tmp=a[left];a[left]=a[i];a[i]=tmp;i=left;left=2*i+1;}else if(left+1<=end&&a[i]<a[left+1]&&a[left]<=a[left+1]){tmp=a[left+1];a[left+1]=a[i];a[i]=tmp;i=left+1;left=2*i+1;}else{break;}}}void heap_sort(int* a,int len){int i,tmp;for(i=(len-1)/2;i>=0;i--){adjustdown(a,i,len-1);}for(i=len-1;i>=1;i--){tmp=a[i];a[i]=a[0];a[0]=tmp;adjustdown(a,0,i-1);}}
<pre name="code" class="cpp">void sort(int *a,int len){int up=0;int down=len-1;int cnt;while(up<down){for(cnt=up;cnt<down;cnt++){if(a[cnt]>a[cnt+1]){a[cnt]^=a[cnt+1];a[cnt+1]^=a[cnt];a[cnt]^=a[cnt+1];}}for(cnt=down;cnt>0;cnt--){if(a[cnt]<a[cnt-1]){a[cnt]^=a[cnt-1];a[cnt-1]^=a[cnt];a[cnt]^=a[cnt-1];}}up++;down--;}}void mergesort(int *a,int *b,int *c){sort(a,N);sort(b,M);int cnt=0,n=0,m=0;while(n<N||m<M){if(n==N){c[cnt++]=b[m];m++;continue;}if(m==M){c[cnt++]=a[n];n++;continue;}if(a[n]==b[m]){c[cnt++]=a[n];c[cnt++]=b[m];n++;m++;continue;}if(a[n]<b[m]){c[cnt++]=a[n];n++;continue;}if(a[n]>b[m]){c[cnt++]=b[m];m++;continue;}}c_len=cnt;}
一个不错的国外排序图示解释网站:http://visualgo.net/sorting.html


0 0
原创粉丝点击