读入一组数据(少于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);
}