1.冒泡排序
冒牌排序是一种经典的排序算法,它是一种稳定的排序。其原理是如果前面的数比后面的数要大,就交换两个数字的位置。代码如下:
for(int i=1; i<=n-1; i++){
for(int j=1; j<=n; j++){
if(a[j]>a[j+1]){
swap(a[j],a[j+1]);
}
}
}
2.归并排序
归并排序的思想是把一串数字从中间分开,然后两边分别排序,最后再合并,从而得到答案。具体代码如下:
void ms(vector<int>& r,int begin,int end){
if(begin>=end) return;
int mid=(begin+end)/2;
ms(r,begin,mid);
ms(r,mid+1,end);
vector<int> rtt(end-begin+1);
int vi=0,i=begin,j=mid+1;
while(i<=mid && j<=end){
rtt[vi++]=r[i]>r[j] ? r[i++]:r[j++];
}
while(i<=mid) rtt[vi++]=r[i++];
while(j<=end) rtt[vi++]=r[j++];
for(int i=0; i<rtt.size(); i++){
r[begin+i]=rtt[i];
}
}
3.插入排序
插入排序的思想是,找到一个位置不对的数字,然后一个一个的比较,找到它应该在的位置。代码如下:
for(int i=1; i<n; i++){
int key=r[i];
int j=i-1;
while(j>=0 && r[j]<key){
r[j+1]=r[j];
j--;
}
r[j+1]=key;
}
4.基数排序
基数排序的原理是定义一个数组,它的下标就是那个相对应的数子的个数。代码如下:
for(int i=0; i<n; i++){
ans[r[i]]++;
}
5.sort快排
sort快排只要一句代码就能完事。但是sort不稳定,如果两个数字的大小一样的话,它就会交换两个数字的位置。具体代码如下:
sort(a.begin(),a.end());