Ho modificato un po la tua funzione, ho aggiunto una variabile bool flag, e un altra variabile int contatore j.

Il programma funziona cosi, per ogni elemento dell'array a[] scorre gli elementi inseriti nell'array b[], se a[i] è maggiore di uno degli elementi di b[] flag diviene false, e non esegue l'inserimento in b[], altrimenti viene inserito in b[].

Ho commentato un po la funzione dovresti riuscire a capire come funziona



codice:
#include<stdlib.h>
#include<iostream>
using namespace std;
void InParte(int a[], int b[], int &c)
{
	int i = 0, j = 0, k = 1, min, conta = 0;
	bool flag = true;


	b[0] = a[0];
	min = b[0];
	for (i = 1; i<5; i++) { // Per tutti gli elementi dell'array a[]
		flag = true;
		// Scorro tutti gli elementi dell'array b[]
		for (j = 0; j<k; j++) {// Per gli elementi inseriti nell'array b[] di volta in volta crescente


			if (a[i]>b[j]) {//Se l'elemento di a[] è maggiore degli elementi di b[]


				flag = false; // disabilito l'inserimento
				break;
			}
		}
		if (flag) {// Se l'elemento è minore di tutti gli elementi di b[]
			b[k++] = a[i];
			min = a[i];
		}
	}


	c = min;
}








int main()
{
	int x[5] = { 0 }, y[5] = { 0 }, n, i = 0, ris, k = 0;




	do {
		cout << "carica vettore x: \n" ;
		for (i = 0; i < 5; i++) { cout<< "-> "; cin >> x[i]; }
		InParte(x, y, ris);
		n = ris;
		cout << "n: " << n << endl;
		for (k = 0; k<5; k++) { cout << y[k] << endl; }
	} while (n != 0);


	system("pause");
	return 0;
}