编写程序完成以下内容

读入一组数据(少于500个),将小于中位数的数据按照从小到大的顺序输出。
论述程序中使用到的排序算法思想

提供一个C语言版本,使用随机数生成后 自行寻找中位数然后判断,最后通过快速排序 得出结果

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

void swap(int *a, int *b)
{

    int tmp;
    tmp = *a;
    *a = *b;
    *b = tmp;
}

int partion(int *arr, int len)
{
    int i, j;

    if(len <= 1)
        return 0;

    i = 0;
    j = len-1;
    while(i < j)
    {
        //找到右边小于左边值,则退出
        while( arr[i] < arr[j] && i < j) //只要右边比左边大,j可以向左移动
        {
            j--;
        }

        swap(&arr[i], &arr[j]);

         //找到左边大于右边值,则退出
        while( arr[i] <= arr[j] && i < j)  //只要右边比左边大,i可以向右移动
        {
            i++; 
        }       
        swap(&arr[i], &arr[j]);
    }
    //返回支点
    return i;
}


//快速排序
void quicksort(int *arr,int len)
{
    
    if(len <= 1)
        return;

    int pivot = partion(arr, len);

 //   display(arr, len);

    quicksort(arr, pivot);

    quicksort(arr+pivot+1, len-pivot-1);

} 

void add(int *arr,int len)
{   int i=0;
    int j=0;
    int addr[len];
    for(i=0;i<len;i++)
    {
        if((arr[i] > arr[len/2-1] )&&(arr[i]!=arr[len/2-1]))
        {
            addr[j] = arr[i];
            j++;
        }
    }
    quicksort(addr,j);
    printf("\n");
    printf("排序后的数组:");
    for(i=0;i<j;i++)
    {
        printf("%d ",addr[i]);
    }
}



int main()
{   int i=0; 
    int arr[20];
    srand((int)time(0));
    for(i=0;i<20;i++)
    {
        arr[i]=rand()%100+1;
    }
    printf("排序前的数组:");
    for(i=0;i<20;i++)
    {
        printf("%d ",arr[i]);
    }
    add(arr,sizeof(arr)/4);
}