排序算法汇总
来源:互联网 发布:手机看漫画软件 编辑:程序博客网 时间:2024/05/19 17:23
1.选择排序
#include<iostream>using namespace std;int main(){ int min,temp; int a[5]={4,2,7,4,19}; for(int i=0;i<5;i++){//找到最小的元素,将其放到a【i】中 min=i; for(int j=i;j<5;j++){ if(a[j]<a[min]) min=j; } temp=a[min]; a[min]=a[i]; a[i]=temp; }for(int i=0;i<5;i++) cout<<a[i]<<" ";}
2.冒泡排序
#include<iostream>using namespace std;int main(){ int a[10]={2,4,100,24,12,29,7,23,45,67}; int temp=0; for(int i=0;i<10;i++){ for(int j=0;j<=i;j++){ if(a[i]<a[j]){ temp=a[j]; a[j]=a[i]; a[i]=temp; } } }for(int i=0;i<10;i++){ cout<<a[i]<<" ";}}
3.插入排序
#include<iostream>using namespace std;int main(){ int a[10]={2,4,100,24,12,29,7,23,45,67}; for(int i=1;i<10;i++){ int j=i-1; int x=a[i]; while(j>=0&&a[j]>x){//依次扫描序号从i-1到1的元素 a[j+1]=a[j]; j--; } a[j+1]=x; } for(int i=0;i<10;i++){ cout<<a[i]<<" ";}}
4.堆排序
#include <iostream>using namespace std;void siftdown(int a[],int i,int len){ int temp=a[i];//a[i]是要下移的元素 int largest; for(largest=2*i+1;largest<len;largest=largest*2+1){//默认最大的为左子节点,同时要迭代完整棵子树 if(a[largest]<a[largest+1]&&largest+1<len){//右子节点是最大的情况 largest++; } if(a[largest]>temp){//将两个子节点中最大的换给父节点 a[i]=a[largest]; i=largest;//必须记录最大值的下标,因为下面还可能继续迭代 } } a[i]=temp;}void makeheap(int a[],int len){//建堆是倒着来的,从最后一个节点开始siftdown, //由于叶节点可以直接跳过,因此从最后一个非叶节点开始,也就是i=len/2-1 for(int i=len/2-1;i>=0;i--) siftdown(a,i,len);}int main(){ int a[10]={2,45,20,3,9,6,5,109,200,10}; makeheap(a,10); for(int j=9;j>=1;j--){ int temp=a[0]; a[0]=a[j]; a[j]=temp; siftdown(a,0,j);//建完堆之后,堆顶a[0]为最大值,把它和最后一个元素a[j]交换, //这样的话,就需要对a[0]进行siftdown,同时由于最后一个元素已经到了争取的位置,因此不再牵涉它 } for(int i=0;i<10;i++){ cout<<a[i]<<" "; }}
5.基数排序
#include<iostream>#include<vector>using namespace std;int getmax(int a[],int size){//获取最大有多少位 int maxnum=a[0]; int max=-1;//个位称为“0位” for(int i=0;i<size;i++){//先求最大的数进而求得最大位数 if(a[i]>maxnum) maxnum=a[i]; } while(maxnum){ maxnum=maxnum/10; max++; } return max;}void radixsort(int a[],int size,int max){ vector<int> vec[10];//这是一个数组,数组元素的类型是int向量 int counts[10];//counts[i]的值表示这个位置为i的数的个数,比如个位为2的数字的个数 int radix=1; for(int i=0;i<max;i++){//每一位都要做一次 for(int p=0;p<10;p++) counts[p]=0; for(int p=0;p<10;p++) vec[p].clear();//每次遍历要清空 for(int j=0;j<size;j++){//例如个位为2的数则添加到vec[2]中 int k=a[j]/radix%10;//获得该位的数字 vec[k].push_back(a[j]); counts[k]++; } int k=0; for(int i=0;i<10;i++){ for(int j=0;j<counts[i];j++){ a[k]=vec[i][j]; k++; } } radix=radix*10; }}int main(){ int a[5]={123,45,3476,91,32}; int max=getmax(a,5); radixsort(a,5,max); for(int i=0;i<5;i++){ cout<<a[i]<<" "; }}
阅读全文
0 0
- 排序算法--排序算法汇总
- 排序算法--排序算法汇总
- 排序算法汇总
- JAVA排序算法汇总
- java排序算法汇总
- 排序算法汇总
- 排序算法汇总
- 排序算法汇总
- 排序算法汇总
- 排序算法汇总
- 排序算法汇总
- 排序算法汇总
- 各种排序算法汇总
- 排序算法汇总
- java排序算法汇总
- 基本排序算法汇总
- 算法---排序汇总
- java 排序算法汇总
- ERP实施技巧:用正确的方法做正确的事
- lucene和solr的区别
- 今日问题
- 工厂方法模式
- .net MVC 随笔2
- 排序算法汇总
- ESL2 Chapter 17 Undirect Graphical Models
- oracle简单操作
- (28)struts框架基础
- js选项卡功能实现
- Android----ViewPager页面滑动基础--FragmentPagerAdapter篇
- 分享一个简单好用的下拉刷新、上拉加载控件
- 赚翻!2017Q3全球半导体销售额飞天创高
- 详解ASP.NET MVC的请求生命周期