Need help with sorting array

In this exercise, you will write some code that reads n unique (no duplicates!) non-negative integers, each one less than fifty (50). Your code will print them in sorted order without using any nested loops-- potentially very efficient! We'll walk you through this:

First, assume you are given an int variable n, that contains the number of integers to read from standard input.

Also assume you are given an array, named wasReadIn, of fifty (50) bool elements and initialize all the elements to false.

Third, read in the n integers from the input, and each time you read an integer, use it as an index into the bool array, and assign that element to be true-- thus "marking" in the array which numbers have been read.

Lastly the "punchline": write a loop that traverses the bool array: every time it finds an element that is true it prints out the element's INDEX -- which was one of the integers read in. Place all the numbers on a single line, separated by a single spaces.



I got this to work but how would i make it so it can handle duplicates in the input. how would i keep track of them in order to print them in the end with the other integers. Hint: change the bool array to an array of int.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int x;
	for (int i=0; i<50; i++)
		wasReadIn[i] = false;
		
	for (int i=0; i<n; i++)
	{	
		cout << "enter num: ";
		cin >> x;
		wasReadIn[x] = true;
	}
	
	for (int i=0; i<50; i++)
	{
		if (wasReadIn[i])
		{
			cout << i << " "; 
		}
	}	
Last edited on
Use an array of integers.

 
int wasReadIn[50];


Instead of setting true/false, add 1 to the integer in the array to indicate it was read, then add 1 every time you get a duplicate.

ie.
9 4 5 2 1 1 7 5 2 1

[0] 0
[1] 3
[2] 2
[3] 0
[4] 1
[5] 2
[6] 0
[7] 1
[8] 0
[9] 1

So the value of each variable is the number of times that index was found.
Topic archived. No new replies allowed.