冒泡排序:
//冒泡
#include <stdio.h>
#include <iostream>
#include <algorithm>
using namespace std;
typedef long long ll;
const int N=1e5+24;
ll a[N];
int main()
{
int n;
scanf("%d",&n);
for(int i=0;i<n;i++){
scanf("%lld",&a[i]);
}
for (int i=0;i<n;i++){
for(int j=0;j<n-i-1;j++){
if(a[j]>a[j+1]){
int t=a[j];
a[j]=a[j+1];
a[j+1]=t;
}
}
}
for(int i=0;i<n;i++){
printf("%lld ",a[i]);
}
return 0;
}
快速排序:
//快排
/*6
6 2 7 3 9 8(案例)*/
#include <iostream>
#include <algorithm>
#include <string.h>
using namespace std;
typedef long long ll;
const int N=1e5+24;
int a[N];
void quicksort(int head,int tail){
int i=head,j=tail,temp=a[head];//设置第一个数为基准数
//i、j分别为左右两个指针,temp存放基准数
if(head>tail) return;//回溯
while(i!=j){
while(a[j]>=temp&&i<j) j--;//i<j
while(a[i]<=temp&&i<j) i++;
if(i<j) swap(a[i],a[j]);//交换a[i]与a[j]的值
}
a[head]=a[i];//注意
a[i]=temp;
quicksort(head,i-1);
quicksort(i+1,tail);
//return;
}
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
quicksort(1,n);
for(int i=1;i<=n;i++) printf("%d ",a[i]);
return 0;
}
归并排序:
/*5
67 34 1 3 1
1 1 3 34 67案例*/
#include <iostream>
#include <algorithm>
typedef long long ll;
const ll N=3e5+24;//a是原数组,b是临时数组,用来储存的
int a[N],b[N];
void merge(int head,int mid,int tail){
int i=head,j=mid+1,k=head;
//i、j分别是(head,mid)、(mid+1,tail)的指针
//k是临时数组的
while(i<=mid&&j<=tail){
if(a[i]<a[j]) b[k++]=a[i++];
else b[k++]=a[j++];
}
while(i<=mid) b[k++]=a[i++];
while(j<=tail) b[k++]=a[j++];
for(int kk=head;kk<=tail;kk++) a[kk]=b[kk];
}
void mergesort(int head,int tail){
if(head>=tail) return;//直接return,回溯
int mid=(head+tail)/2;
mergesort(head,mid);
mergesort(mid+1,tail);
merge(head,mid,tail);//head....mid mid+1....tail
}
int main()
{
int n;
scanf("%d",&n);
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
mergesort(1,n);
for(int i=1;i<=n;i++) printf("%d ",a[i]);
return 0;
}