#include <stdio.h>
int a[1000001]
int n,m
int partitions(int a[],int low,int high)
{
int pivotkey=a[low]
while(low<high)
{
while(low<high &&a[high]<=pivotkey)--high
a[low]=a[high]
while(low<high &&a[low]>=pivotkey)++low
a[high]=a[low]
}
a[low]=pivotkey
return low
}
void Myqsort(int a[],int low,int high)
{
int pivottag
if(low<high)
{
pivottag=partitions(a,low,high)
Myqsort(a,low,pivottag-1)
Myqsort(a,pivottag+1,high)
}
}
void quicksort(int a[],int n)
{
Myqsort(a,0,n)
}
int main()
{
int i
while(scanf("%d%d",&n,&m)==2)
{
for(i=0i<ni++)scanf("%d",&a[i])
quicksort(a,n)
i=0
while(m &&i!=n)
{
printf("%d ",a[i])
--m
i++
}
printf("\n")
}
return 0
}
其实这个题目估计就是训练你们自己写排序函数,所以建议你自己写几个排序函数测试下
#include "stdio.h"#define M 3
#define N 10
void main()
{int a[N],i,j,k,l
int max[M] /*该数组max[M]用于存放数组a[N]中前M个最大的数的下标*/
printf("please enter a:")
for(i=0i<Ni++)
scanf("%d",&a[i])
for(j=0j<Mj++) /*先给max[M]赋值,使其恒大于数组a[N]中的最大下标数N*/
{max[j]=N+j
printf("max[%d]=%d ",j,max[j])
}
for(j=0j<Mj++) /*循环求出数组max[j]的值;即数组a[N]中前M大的数的下标*/
{
k=-2147483648 /*做一个用于比较大小的中间变量k,取int能取的最小数,使数组a[]中的数恒大等于它*/
for(i=0i<Ni++) /*依次将k与数组a[N]中的数做比较*/
{
if(k<a[i])
{
for(l=0l<Ml++) //这里逻辑应该是这样:只有max数组中都没i时,才能对k的值进行更新;
if(max[l]==i)
break
if(l==M)
{
k=a[i]
max[j]=i
}
}
}
}
printf("\n\n\n") /*输出数组a
[N]中前M个最大数*/
for(j=0j<Mj++)
{k=max[j]
printf("%d ",a[k])
}
for(i=0i<Ni++)
printf("%5d",a[i])
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)