几个简单的排序算法

来源:互联网 发布:codeblocks中文版mac 编辑:程序博客网 时间:2024/05/15 12:30

插入排序:

工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,找到相应位置并插入。插入排序在实现上,通常采用in-place排序(即只需用到O(1)的额外空间的排序),因而在从后向前扫描过程中,需要反复把已排序元素逐步向后挪位,为最新元素提供插入空间。 

[cpp] view plaincopy
  1. #include<iostream>  
  2. #include<cstddef>  
  3. using namespace std;  
  4. void swap(int &,int &);  
  5. int main(){  
  6. int s[10];  
  7. //输入十个数   
  8. cout<<"input ten numbers:"<<endl;  
  9. for(int ix=0;ix<10;++ix)  
  10. cin>>s[ix];  
  11. //进行排序  
  12. for(int m=1;m<10;++m){  
  13.     for(int n=m;n>0;--n){  
  14.      if(s[n]<s[n-1]) swap(s[n],s[n-1]);  
  15.     }  
  16. }  
  17. cout<<"After sort:"<<endl;  
  18. for(int ix=0;ix<10;++ix)  
  19. cout<<s[ix]<<endl;;  
  20. cout<<endl;  
  21. return 0;      
  22. }  
  23. void swap(int &m,int &n){  
  24. int temp;  
  25. temp=m;  
  26. m=n;  
  27. n=temp;  
  28. }  


冒泡排序:

依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。

  由于在排序过程中总是小数往前放,大数往后放,相当于气泡往上升,所以称作冒泡排序。

[cpp] view plaincopy
  1. #include<iostream>  
  2. using namespace std;  
  3. void swap(int &,int &);  
  4. int main(){  
  5. int s[10];  
  6. //输入十个数   
  7. cout<<"input ten numbers:"<<endl;  
  8. for(size_t ix=0;ix<10;++ix)  
  9. cin>>s[ix];  
  10. //进行排序  
  11. for(int i=9;i>=0;--i){  
  12. for(int j=0;j<i;++j){  
  13. if(s[j]>s[j+1]) swap(s[j],s[j+1]);  
  14. }  
  15. }  
  16. cout<<"The sorted numbers is:"<<endl;  
  17. for(size_t ix=0;ix<10;++ix)  
  18. cout<<s[ix]<<"\t";  
  19. cout<<endl;  
  20. return 0;      
  21. }  
  22. void swap(int &m,int &n){  
  23. int temp;  
  24. temp=m;  
  25. m=n;  
  26. n=temp;  
  27. }  

直接利用algorithm头文件算法进行排序


[cpp] view plaincopy
  1. #include<iostream>  
  2. #include<vector>  
  3. #include<algorithm>  
  4. using namespace std;  
  5. int main(){  
  6.    vector<int> ivec;  
  7.    int m;  
  8.    ivec.push_back(10);  
  9.    cout<<"input numbers:"<<endl;  
  10.    while(cin>>m) ivec.push_back(m);  
  11.    sort(ivec.begin(),ivec.end());  
  12.    cout<<"After sort():"<<endl;  
  13.    for(vector<int>::iterator ix=ivec.begin();ix<ivec.end();++ix)  
  14.    cout<<*ix<<endl;  
  15.    return 0;  
  16. }  

选择排序:

每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。 


[cpp] view plaincopy
  1. #include<iostream>  
  2. using namespace std;  
  3. void swap(int&,int&);  
  4. int main(){  
  5. //输入一个数组   
  6. int n,ix=0;  
  7. int s[100];  
  8. cout<<"input some numbers:"<<endl;  
  9. while(cin>>n) {  
  10. s[ix]=n;  
  11. ix++;  
  12. }  
  13. //进行排序   
  14. for(int i=0;i<ix-1;++i){  
  15. int pos=i;  
  16. for(int j=i;j<ix;++j)  
  17. if(s[j]<s[pos]) swap(s[j],s[pos]);  
  18. }  
  19. cout<<"After sort:"<<endl;  
  20. for(int i=0;i<ix;++i)  
  21.    cout<<s[i]<<endl;  
  22. }   
  23. void swap(int &m,int &n){  
  24. int temp=m;  
  25. m=n;  
  26. n=temp;  
  27. }  
0 0
原创粉丝点击