码迷,mamicode.com
首页 > 编程语言 > 详细

七种排序算法(更新中。。。)

时间:2018-06-22 01:09:03      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:ios   sign   lib   nbsp   insert   name   stream   内存   TE   

  1 #include<iostream>
  2 #include<cstdlib>
  3 #include<ctime>
  4 using namespace std;
  5 const int len = 20;
  6 //1、冒泡排序
  7 void Bubble_sort(int s[],int len){
  8     bool flag;
  9     for(int i=1;i<len-1;++i){
 10         flag=false;
 11         for(int j=1;j<=len-i;++j)
 12             if(s[j]>s[j+1]){flag=true;swap(s[j],s[j+1]);}
 13         if(!flag)break;
 14     }
 15 }
 16 //2、选择排序
 17 void Select_sort(int s[],int len){
 18     int k;
 19     for(int i=1;i<len;++i){
 20         k=i;
 21         for(int j=i+1;j<=len;++j)
 22             if(s[k]>s[j])k=j;
 23         if(k!=i)swap(s[i],s[k]);
 24     }
 25 }
 26 //3、插入排序
 27 void Insert_sort(int s[],int len){
 28     for(int i=2;i<=len;++i){
 29         int tmp=s[i],j;
 30         for(j=i-1;j>0&&tmp<s[j];--j);
 31         for(int k=i;k>j+1;--k)s[k]=s[k-1];
 32         s[j+1]=tmp;
 33     }
 34 }
 35 //4、快速排序
 36 int Quick_sort(int s[],int low,int high){
 37     int tmp=s[low];//首元素是枢轴
 38     while(low<high){//待排序序列长度大于1
 39         while(low<high&&tmp<=s[high])--high;//大于枢轴的元素依旧在右边
 40         s[low]=s[high];//将小于枢轴的元素放左边
 41         while(low<high&&tmp>=s[low])++low;//小于枢轴的元素依旧在左边
 42         s[high]=s[low];//将大于枢轴的元素放右边
 43     }
 44     s[low]=tmp;//枢轴记录到位
 45     return low;//返回枢轴的位置
 46 }
 47 void Qsort(int s[],int low,int high){
 48     if(low<high){
 49         int key=Quick_sort(s,low,high);
 50         Qsort(s,low,key-1);
 51         Qsort(s,key+1,high);
 52     }
 53 }
 54 //5、希尔排序(采用直接插入)
 55 void Shell_sort(int s[],int len){
 56     for(int step=len/2;step>0;step/=2){//设置步长
 57         for(int i=step;i<=len;++i){
 58             int tmp=s[i],j;
 59             for(j=i-step;j>0&&tmp<s[j];j-=step);
 60             for(int k=i;k>j+step;k-=step)s[k]=s[k-step];
 61             s[j+step]=tmp;
 62         }
 63     }
 64 }
 65 //6、归并排序
 66 void Merge(int s[],int t[],int low,int mid,int high){
 67     int i=low,j=mid+1,k=low;
 68     while(i<=mid&&j<=high){
 69         if(s[i]<=s[j])t[k++]=s[i++];
 70         else t[k++]=s[j++];
 71     }
 72     while(i<=mid)t[k++]=s[i++];
 73     while(j<=high)t[k++]=s[j++];
 74     for(int i=low;i<=high;++i)s[i]=t[i];//将区间[low,high]拷贝到原来数组a的位置,表示该区间元素已经排好序
 75 }
 76 void Merge_sort(int s[],int t[],int low,int high){
 77     if(low<high){
 78         int mid=(low+high)/2;
 79         Merge_sort(s,t,low,mid);//递归分成左部分
 80         Merge_sort(s,t,mid+1,high);//递归分成右部分
 81         Merge(s,t,low,mid,high);//将两部分归并
 82     }
 83 }
 84 //打印数组值
 85 void print(int s[],int len){
 86     for(int i=1;i<=len;++i)
 87         cout<<s[i]<<(i==len?"\n":" ");
 88 }
 89 
 90 int main(){
 91     int *s=new int[len+1];
 92     int *t=new int[len+1];//t为辅助数组
 93     srand((unsigned)time(NULL));
 94     for(int i=1;i<=len;++i)s[i]=rand();
 95     print(s,len);//打印原数组
 96     /*1、冒泡排序
 97     Bubble_sort(s,len);*/
 98     /*2、选择排序
 99     Select_sort(s,len);*/
100     /*3、插入排序
101     Insert_sort(s,len);*/
102     /*4、快速排序
103     Qsort(s,1,len);*/
104     /*5、希尔排序
105     Shell_sort(s,len);*/
106     /*6、归并排序
107     Merge_sort(s,t,1,len);*/
108     print(s,len);//排序后的数组
109 
110     delete[]s;//释放内存
111     delete[]t;
112     return 0;
113 }

 

七种排序算法(更新中。。。)

标签:ios   sign   lib   nbsp   insert   name   stream   内存   TE   

原文地址:https://www.cnblogs.com/acgoto/p/9211511.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!