面試板子

寒方發表於2024-05-12

插入排序

    for(int i=1;i<=n;i++)
        for(int j=i;j>=2;j--)
        {
            if(a[j]>a[j-1])
                swap(a[j],a[j-1]);
            else 
                break;
        }

選擇排序

    for(int i=1;i<=n;i++)
        for(int j=i+1;j<=n;j++)
            if(a[i]>a[j]) swap(a[i],a[j]);

氣泡排序

    for(int i=1;i<=n;i++)
        for(int j=1;j<=n-1;j++)
            if(a[j]>a[j+1]) swap(a[j],a[j+1]);

快速排序

void q_sort(int l,int r)
{
    if(l<r)
    {
        int mid = partition(l,r);
        q_sort(l,mid-1);
        q_sort(mid+1,r);        
    }
}
int partition(int l,int r)
{
    int x = a[r];
    int i=l-1;
    for(int j=l;j<=r-1;j++)
    {
        
        if(a[j]<=x)
        {
            i++;
            swap(a[i],a[j]);
        }
    }
    swap(a[i+1],a[r]);
    return i+1;
}

堆排序

void down(int i,int n)
{
    while(i*2<=n)
    {
        int j=i*2;
        if(j+1<=n && a[j+1]>a[j]) j++;
        if(a[i]<a[j])
        {
            swap(a[i],a[j]);
            i=j;
        }
        else break;
    }
}

for(int i=n/2;i>=1;i--) down(i,n);
    
    for(int i=1;i<=n;i++)
    {
        swap(a[1],a[n-i+1]);    
        down(1,n-i);
    }

相關文章