zoukankan      html  css  js  c++  java
  • 排序算法模板

    选择排序

    //选择
    #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("
    ");
        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("
    ");
        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("
    ");
        mergesort(0,n-1);
        printf("排序后:");
        for(int i=0;i<n;i++)printf("%d ",a[i]);
        printf("
    ");
        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("
    ");
        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("
    ");
        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("
    ");
        quick_sort(0,n-1);
        printf("排序后:");
        for(int i=0;i<n;i++)printf("%d ",a[i]);
        printf("
    ");
        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("
    ");
        Insertion_Sort(n);
        printf("排序后:");
        for(int i=0;i<n;i++)printf("%d ",a[i]);
        printf("
    ");
        return 0;
    }
  • 相关阅读:
    C# winform 获取标题栏,状态栏,菜单栏的高度
    <转载>OleDb操作Access数据库:新增记录时获取自动编号的主键值
    《名利场》:微软 “ 失落的十年”
    Lisp的永恒之道(转)
    Google Earth KML数据格式转换成Shp数据格式(转)
    【转】ArcGIS投影转换与坐标转换
    利用Mono.Cecil动态修改程序集来破解商业组件(仅用于研究学习)
    C# mouseDoubleClick与DoubleClick的关系
    ACCESS通用操作数据类
    VS2010单元测试入门实践教程
  • 原文地址:https://www.cnblogs.com/ccsu-zry/p/9777856.html
Copyright © 2011-2022 走看看