//题目:查找最小的k 个元素题目:输入n 个整数,输出其中最小的k 个。
思想:两个数组,一个用于存储输入的n 个整数,另一个用于存储当前比较的数中最小的k个整数,按从小到大排列。那么排序数组中第k 个数是当前k个数中最大的。和n个数的数组中元素一个个比较,最终保证存k个元素的数组中存储的是所有数中最小的k个数。
#include <iostream>
using namespace std;
#define MAX 20
#define NUM 10
int *sort(int a[],int k,int value) //该函数返回指针型数据,即地址,返回的指针指向整型变量
{
int i;
int j;
int temp;
int min;
a[k-1]=value;
for(i=0;i<k-1; i++) // 采用的是直接选择排序
{
min = i;
for(j=i+1; j<k;j++)
{
if(a[min]>a[j])
{
min=j;
}
}
temp = a[i];
a[i] = a[min] ;
a[min] = temp;
}
return a; // 考虑到如何既能找到k个数中最大的数,进行比较。又能最终输出,最小的k个数,所以返回数组的地址
}
int main()
{
int n;
int k;
int i;
int j=0;
int *tmp;
int arr[MAX];
int minArr[NUM];
cout<<"请输入数据个数"<<endl;
cin>>n;
cout<<"请输入最小的数据个数"<<endl;
cin>>k;
cout<<"请输入"<<n<<"个数据"<<endl;
for(i=0; i<n; i++)
{
cin>>arr[i];
if(j<k-1)
{
minArr[j++]=arr[i]; //初始化,这样减少了k次排序
}
}
tmp=sort(minArr,k,arr[k-1]);
for(i=k; i< n; i++)
{
if(arr[i]<tmp[k-1])
{
tmp=sort(minArr,k,arr[i]);
}
}
cout<<"最小的"<<k<<"个数"<<endl;
// minArr = tmp; //不行
for(i=0; i<k; i++)
cout<<tmp[i]<<endl;
return 0;