八大排序的代码实现
来源:互联网 发布:saas软件销售模式 编辑:程序博客网 时间:2024/05/17 03:01
#include <bits/stdc++.h>using namespace std;//快排void quicksort(int *a,int left,int right){if(left>=right)return;int i=left,j=right,key=a[i];while(i<j){ while(i<j&&key<=a[j]) --j; if(i<j) a[i++]=a[j]; while(i<j&&key>=a[i]) ++i; if(i<j) a[j--]=a[i];}a[i]=key;quicksort(a,left,i-1);quicksort(a,i+1,right);}//归并void mergr(int *a,int *temp,int left,int mid,int right){int i=left,j=mid+1,k=left;while(i<=mid&&j<=right) a[i]<a[j]?temp[k++]=a[i++]:temp[k++]=a[j++];while(i<=mid) temp[k++]=a[i++];while(j<=right) temp[k++]=a[j++];for(int c=left;c<=right;++c) a[c]=temp[c];}void mergesort(int *a,int *temp,int left,int right){if(left<right){ int mid=(left+right)/2; mergesort(a,temp,left,mid); mergesort(a,temp,mid+1,right); mergr(a,temp,left,mid,right);}}//堆排序void adjustheap(int *a,int i,int size){for(int child;2*i+1<=size-1;i=child){child=2*i+1;if(child+1<=size-1&&a[child]<a[child+1]) ++child;if(a[child]>a[i]) swap(a[i],a[child]);else break;}}void heapsort(int *a,int size){ for(int i=size/2-1;i>=0;--i) adjustheap(a,i,size); for(int i=size-1;i>0;--i){ swap(a[0],a[i]); adjustheap(a,0,i); }}//冒泡void bubblesort(int *a,int len){ for(int i=0;i<len-1;++i){ //趟数 for(int j=0;j<len-1-i;++j) if(a[j]>a[j+1]) swap(a[j],a[j+1]);}}//选择void selectsort(int *a,int len){for(int i=0,min;i<len-1;++i){min=i;for(int j=i+1;j<len;++j){ if(a[j]<a[min]) min=j;}if(min!=i) swap(a[i],a[min]);}}//插入void insertsort(int *a,int len){ for(int i=1;i<len;++i){ for(int j=i;j-1>=0&&a[j-1]>a[j];--j) swap(a[j],a[j-1]); }}//希尔void shellsort(int *a,int len){for(int dk=len/2;dk>=1;dk/=2) for(int i=dk;i<len;++i) for(int j=i;j-dk>=0&&a[j-dk]>a[j];j-=dk) swap(a[j],a[j-dk]);}//计数void countsort(int *a,int *b,int k,int len){int c[k],i=0;memset(c,0,sizeof(int)*k);for(i=0;i<len;++i)c[a[i]]++;for(i=1;i<=20;++i)c[i]+=c[i-1];for(i=len-1;i>=0;--i){// for(i=0;i<len;++i){ b[c[a[i]]-1]=a[i]; c[a[i]]--; } for(i=0;i<len;++i) a[i]=b[i];}//基数int Maxbit(int *a,int len){int max=1,temp=10;for(int i=0;i<len;++i){while(a[i]>temp){temp*=10;++max;}}return max;}void radixsort(int *a,int len){int maxbit=Maxbit(a,len);int radix=1;int temp[len];int count[10];for(int i=1,j,k;i<=maxbit;++i){ for(j=0;j<10;++j) count[j]=0; for(j=0;j<len;++j){ k=(a[j]/radix)%10; ++count[k]; } for(j=1;j<10;++j) count[j]+=count[j-1]; for(j=len-1;j>=0;--j){ k=(a[j]/radix)%10; temp[count[k]-1]=a[j]; --count[k]; } for(j=0;j<len;++j) a[j]=temp[j]; radix*=10;}}inline void Print(int *a,int len){for(int j=0;j<len;++j) cout<<a[j]<<' '; cout<<endl;}int main(){ int a[50]; int b[50]={0}; const int k=50; int count,i; while(true){ count=0; for(i=0;;++i){ cin>>a[i]; count++; if(getchar()=='\n') break; } quicksort(a,0,count-1); mergesort(a,b,0,count-1); heapsort(a,count); bubblesort(a,count); selectsort(a,count); insertsort(a,count); shellsort(a,count); countsort(a,b,k,count); radixsort(a,count); Print(a,count); } return 0;}//√为稳定//插入排序 直接插入√ 希尔排序(平均O(nlogn))//选择排序 直接选择 堆排序//交换排序 冒泡排序√ 快速排序//归并排序√ O(n) 基数排序√
0 0
- 八大排序的代码实现
- 总结八大排序算法的基本思想与代码实现
- 八大排序算法的实现
- 八大排序算法的实现
- 八大排序的python实现
- 八大排序代码总结
- Java 语言实现的八大排序算法
- Java 语言实现的八大排序算法
- Java 语言实现的八大排序算法
- 八大排序算法的C++实现
- 八大排序算法的Python实现
- 八大排序算法的Python实现
- 八大排序算法的Python实现
- 八大排序的java实现(上)
- 八大排序算法的 Python 实现
- 八大排序算法的 Python 实现
- 八大排序算法的Python实现
- 八大排序算法的Java实现
- texture packer导出的图片程序中拼接有黑边的问题
- 私有pod
- js中的extend
- [Unity脚本基础] 代码解析
- YOLO 安装过程
- 八大排序的代码实现
- html编码常见的有utf-8和gb2312编码等,应该如何判断选择?
- hdu5917——Wrestling Match(二分图染色)
- CentOS 7将网卡名称eno16777736改为eth0
- 解决:mysql导出SQL文件
- 史上最全常用正则表达式
- 基础简单的数据结构-C语言-二叉树链表构造
- 去除“Internet Explorer 已限制此网页运行脚本或Activex控件”
- vs 快捷键