排序算法模板

选择排序

//选择
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e4+5;
int a[N];
int main(){
    int n;
    printf("请输入数组元素个数:");
    scanf("%d",&n);
    srand(time(NULL));
    for(int i=0;i<n;i++)a[i]=1+(rand()%100);
    printf("生成的数组为:");
    for(int i=0;i<n;i++)printf("%d ",a[i]);
    printf("\n");
    for(int i=0;i<n-1;i++){
        int min=i;
        for(int j=i+1;j<n;j++){
            if(a[min]>a[j])min=j;
        }
        swap(a[i],a[min]);
    }
    printf("排序后:");
    for(int i=0;i<n;i++)printf("%d ",a[i]);
    printf("\n");
    return 0;
}

归并排序

//归并
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e4+5;
int a[N],L[N],R[N];
void merge(int l,int m,int r){
    int n1=m-l+1,n2=r-m;
    for(int i=0;i<n1;i++)L[i]=a[l+i];
    for(int i=0;i<n2;i++)R[i]=a[m+1+i];
    int k1=0,k2=0,k=l;
    while(k1<n1&&k2<n2){
        if(R[k2]<L[k1])a[k++]=R[k2++];
        else a[k++]=L[k1++];
    }
    for(int i=k1;i<n1;i++)a[k++]=L[k1++];
    for(int i=k2;i<n2;i++)a[k++]=R[k2++];
}
void mergesort(int l,int r){
    if(l<r){
        int m=(l+r)/2;
        mergesort(l,m);
        mergesort(m+1,r);
        merge(l,m,r);
    }
}
int main(){
    int n;
    printf("请输入数组元素个数:");
    scanf("%d",&n);
    srand(time(NULL));
    for(int i=0;i<n;i++)a[i]=1+(rand()%1000);
    printf("生成的数组为:");
    for(int i=0;i<n;i++)printf("%d ",a[i]);
    printf("\n");
    mergesort(0,n-1);
    printf("排序后:");
    for(int i=0;i<n;i++)printf("%d ",a[i]);
    printf("\n");
    return 0;
}

冒泡排序

//冒泡
#include<bits/stdc++.h>

using namespace std;
typedef long long ll;
const int N=1e4+5;
int a[N];
int main(){
    int n;
    printf("请输入数组元素个数:");
    scanf("%d",&n);
    srand(time(NULL));
    for(int i=0;i<n;i++)a[i]=1+(rand()%100);
    printf("生成的数组为:");
    for(int i=0;i<n;i++)printf("%d ",a[i]);
    printf("\n");
    for(int i=0;i<n-1;i++){
        for(int j=0;j<n-1;j++){
            if(a[j]>a[j+1])swap(a[j],a[j+1]);
        }
    }
    printf("排序后:");
    for(int i=0;i<n;i++)printf("%d ",a[i]);
    printf("\n");
    return 0;
}

快速排序

//快速
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e4+5;
int a[N];
void quick_sort(int l,int r){
    if(l>=r)return;
    int i=l,j=r,temp=a[l]; 
    while(i!=j){
        while(i<j&&a[j]>=temp)j--;
        while(i<j&&a[i]<=temp)i++;
        if(i<j)swap(a[i],a[j]);
    }
    a[l]=a[i];
    a[i]=temp;
    quick_sort(l,i-1);
    quick_sort(i+1,r);
}
int main(){
    int n;
    printf("请输入数组元素个数:");
    scanf("%d",&n);
    srand(time(NULL));
    for(int i=0;i<n;i++)a[i]=1+(rand()%100);
    printf("生成的数组为:");
    for(int i=0;i<n;i++)printf("%d ",a[i]);
    printf("\n");
    quick_sort(0,n-1);
    printf("排序后:");
    for(int i=0;i<n;i++)printf("%d ",a[i]);
    printf("\n");
    return 0;
}

插入排序

//插入
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e4+5;
int a[N];
void Insertion_Sort(int n)
{
    int i,j;
    for(i=1;i<n;i++)
    {
        int temp=a[i];
        for(j=i;j>0&&a[j-1]>temp;--j)
            a[j]=a[j-1];
        a[j]=temp;
    }
}
int main(){
    int n;
    printf("请输入数组元素个数:");
    scanf("%d",&n);
    srand(time(NULL));
    for(int i=0;i<n;i++)a[i]=1+(rand()%100);
    printf("生成的数组为:");
    for(int i=0;i<n;i++)printf("%d ",a[i]);
    printf("\n");
    Insertion_Sort(n);
    printf("排序后:");
    for(int i=0;i<n;i++)printf("%d ",a[i]);
    printf("\n");
    return 0;
}

 

posted @ 2018-10-12 14:15  ccsu_zry  阅读(187)  评论(0编辑  收藏  举报