首页 > 解决方案 > 如何获得快速排序深度?

问题描述

亚历克斯有一些不同高度的支柱。他正试图根据柱子的高度按降序排列。最近他学习了分治法(D&C)算法策略。Divide & Conquer 中有一个排序算法,其特殊情况是 f(n) = O(n^2)。所以,现在你必须帮助 Alex 使用特定的 D&C 算法对柱子进行排序。最后,您需要显示k,即排序所需的除法次数,并按降序显示高度。

输入:在第一行,你必须取柱子的数量,N (1<=N<=100),然后,在第二行,你必须取 N 个整数来表示柱子的高度。

输出:需要按降序显示k和柱子的高度

样本输入:
6

6 3 8 11 2 77

样本输出:
3
77 11 8 6 3 2

截图中的代码:

#include<stdio.h>
int k=0;
void swap(int *a, int *b)
{
    int t=*a;
    *a=*b;
    *b=t;
}

int partition(int a[], int low, int high)
{
    int pivot=a[high];
    int i=(low-1);

    for(int j-low;j<high; j++)
    {
        if(a[j]>=pivot){
            i++;
            swap(&a[i],&a[j]);
        }
    }

    swap(&a[i+1],&a[high]);
    return (i+1);
}

void quicksort(int a[], int low, int high)
{
    if(low<high)
    {
        int pi-partition(a,low,high);
 
        quicksort(a,low,pi-1);
        quicksort (a,pi+1,high);
        k++;
    }
}

标签: calgorithmquicksort

解决方案


推荐阅读