zoukankan      html  css  js  c++  java
  • 第八章部分例题排序

    归并排序

    #include <cstdio>
    #include <iostream>
    #include <algorithm>
    
    using namespace std;
    
    const int maxn=100;
    int A[maxn];
    int T[maxn];
    
    void mergesort(int* A,int x,int y,int* T)
    {
        if(1+x<y)              //如果写成x<y将会造成死循环
        {
            int m=x+(y-x)/2;
    
            mergesort(A,x,m,T);
            mergesort(A,m,y,T);
    
            int p=x,i=x,j=m;
    
            while(i<m || j<y)
            {
                if(j>=y || (i<m && A[i]<A[j])) T[p++]=A[i++];
                else T[p++]=A[j++];
            }
    
            for(int k=x;k<y;k++)
                A[k]=T[k];
        }
    }
    
    int main()
    {
        int x=0;
        int y;
        cin>>y;
    
        for(int i=0;i<y;i++) cin>>A[i];
        
        for(int i=x;i<y;i++)
            printf("%d ",A[i]);
        printf("
    ");
    
        mergesort(A,0,y,T);
    
        for(int i=x;i<y;i++)
            printf("%d ",A[i]);
        printf("
    ");
    
        return 0;
    }

    注意递归基

    void quicksort(int*A ,int x,int y)
    {
        if(x+1>=y) return;
    
        int temp=A[x];
    
        int i=x,j=y-1;
    
        while(i!=j)
        {
            while(A[j]>=temp && j>i) j--;
            while(A[i]<=temp && j>i) i++;
    
            int t=A[i];
            A[i]=A[j];
            A[j]=t;
        }
    
        A[x]=A[j];
        A[j]=temp;
    
        quicksort(A,x,i);
        quicksort(A,i+1,y);
    }
    Yosoro
  • 相关阅读:
    适配器和外观模式
    命令模式
    单件模式
    工厂模式
    装饰者模式
    观察者模式(发布--订阅模式)
    设计模式之策略模式
    C#学习笔记15
    C#学习笔记14
    lucky的时光助理-2017.02
  • 原文地址:https://www.cnblogs.com/tclan126/p/7488015.html
Copyright © 2011-2022 走看看