排序代码示例
冒泡排序
#include<iostream> using namespace std; int main(){ int m[]={6,8,44,7,9,34,64,1}; for(int j=0;j<8;j++){ for(int i=j+1;i<8;i++){ if(m[j]>m[i]){ swap(m[j],m[i]); } } } for(int i=0;i<8;i++){ cout<<m[i]<<' '; } return 0; }
/选择排序
基本思想:从数组的末排序区域选出一个最小的元素
把它与数组中的第一个元素交换位置
然后再从剩下的末排序区域选出一个最小的元素
把它与数组中的第二个元素交换位置
重复上述过程,直到数组中的所有元素按升序排列完成
#include<iostream> using namespace std; int main(){ int min=0; int m[]={6,8,44,7,9,34,64,1}; for(int j=0;j<8;j++){ min=j; for(int i=j+1;i<8;i++){ if(m[i]<m[min]){ min=i; } } swap(m[j],m[min]); } for(int i=0;i<8;i++){ cout<<m[i]<<' '; } return 0; }
/插入排序
基本思想:把一个要排序的数组划分为己排序和为排序的两部分
再从未排序部分逐个去除元素
把它和己排序元素进行比较
从右到左比较相邻的两个元素
如果右边的元素比左边的元素小
则交换两个元素,并向左继续比较和交换
否则就停止比较
按此处理为排序部分的所有元素
最终得到一个按升序排列的有序数组
这种算法也叫直接插入排序
#include<iostream> using namespace std; int main(){ int min=0; int m[]={6,8,44,7,9,34,64,1}; for(int j=1;j<8;j++){ for(int i=j;i>0;i--){ if(m[i]<m[i-1]){ swap(m[i],m[i-1]); }else{ break; } } } for(int i=0;i<8;i++){ cout<<m[i]<<' '; } return 0; }
/希尔排序
对一维数组中的十个数组进行从小到大排序
基本思想:是直接插入排序的进阶版本,
将整个待排序元素序列分割成若干个子序列,
(由相隔某个“增量”的元素组成)分别进行直接插入排序,然后缩减增量再进行排序,
待整个序列中的元素基本有序(增量足够小)时,在对全体元素进行一次直接插入排序
#include<iostream> #include<math.h> using namespace std; int main(){ string m="wangjiaxing"; for(double i=11;i>1;){ i=round(i/2); for(int j=0;j+int(i)<11;j++){ if(m[j]>m[j+int(i)]){ swap(m[j],m[j+int(i)]); } } } cout<<m; return 0; }
/快速排序
#include<iostream> using namespace std; int n[]={6,3,5,8,9,10,7,34,89,2}; //将第一个数据作为基准数,根据基准数将数据分为两部分,大的在基准数右边,小的在基准数左边 //找准基准数位置后,进行左递归右递归重复上述操作 void ks(int n[10],int i,int j){ if(i<j){ int l=i,r=j; int m=n[i]; while(l!=r){ while(n[r]>=m&&l!=r){ r--; } while(n[l]<=m&&l!=r){ l++; } if(l<r){ swap(n[l],n[r]); } } swap(n[i],n[l]); ks(n,i,l-1); ks(n,l+1,j); } } int main(){ ks(n,0,9); for(int i=0;i<10;i++){ cout<<n[i]<<" "; } return 0; }
/桶排序
#include<iostream> using namespace std; int main(){ int n,ans; //cin>>n; int t[100]={0}; for(int i=0;i<10;i++){ cin>>ans; t[ans]++; } for(int i=10;i>0;i--){ if(t[i]!=0){ while(t[i]>0){ cout<<i<<" "; t[i]--; } } } }
end