微软面试100题之第5题

查找最小的 k 个元素
题目:输入 n 个整数,输出其中最小的 k 个。

例如输入 1,2,3,4,5,6,7 和 8 这 8 个数字,则最小的 4 个数字为 1,2,3 和 4。

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

typedef struct Linklist{
	int data;
	struct Linklist *next;
}Linklist;

void insertValue(Linklist * &head,int value){
	Linklist *listnode = (Linklist *)malloc(sizeof(Linklist));
	printf("listnode addr:%d\n",listnode);
	listnode->data = value;
	Linklist *m,*pre;

	if(head==NULL){
		head = listnode;
		printf("head addr:%d\n",head->data);
		head->next = NULL;
		printf("test\n");
		return;
	}

	m = head;
	while(m!=NULL){
		if(m->data>value){
			if(m==head){
				listnode->next = head;
				head = listnode;
				return;
			}
			break;
		}
		pre = m;
		m = m->next;
	}
	pre->next = listnode;
	listnode->next = m;
}

main(){

	int n,k,i;
	Linklist *head,*p;
	head = NULL;
	printf("input the n and k:\n");
	scanf("%d %d",&n,&k);
	if(k>n)	exit(-1);
	int *a = (int *)malloc(sizeof(int));
	printf("input the array:\n");
	for(i=0;i<n;i++){
		scanf("%d",&a[i]);
		printf("%d\n",a[i]);
		insertValue(head,a[i]);

	}
 	p = head;
 	printf("the minimum %d elements are:\n",k);
	for(i=0;i<k;i++){
		printf("%d\t",p->data);
		p = p->next;
	}
	system("pause");
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值