- Write a C program to delete duplicate elements from a sorted array.
- Write a C program to print unique elements of an array
Given an sorted integer array of length N. Array elements are sorted in increasing order(inputArray[i] <= inputArray[j] for every i < j). We have to delete duplicate elements from array and print unique elements of the array.
For Example
Sorted array containing duplicate elements : 1 2 2 2 4 4 7 8 9 9
Output array containing only unique elements : 1 2 4 7 8 9
Points to Remember
As the array is sorted, all duplicate elements must exist in adjacent positions.
For Example
In sorted array 1 2 2 2 3 4 4 5 6 7 7 7, all instances of 2, 4, and 7 are in adjacent positions. We will use this fact in below program to delete duplicate elements.
Algorithm to delete duplicate elements from a sorted array
Let inputArray be an array of length N, and readIndex and writeIndex are two integer variables to store index references.
- In a sorted array, all duplicate elements must exist in adjacent positions.
- At any instant, all element to the left of writeIndex are unique.
- inputArray[writeIndex] is always the last unique element added.
- We will traverse inputArray using using readIndex. If inputArray[readIndex] is not equal to inputArray[writeIndex], then inputArray[readIndex] is not same as the last unique element added. Hence, add inputArray[readIndex] in set of unique elements.
- At the end of traversal, we will get all unique elements between index 0 to writeIndex.
C program to delete duplicate elements from a sorted array
/* * C Program to delete duplicate elements from an sorted array */ #include <stdio.h> #include <conio.h> int main(){ int inputArray[500], elementCount, counter; int readIndex, writeIndex; printf("Enter number of elements in array: "); scanf("%d", &elementCount); printf("Enter %d numbers in increasing order \n", elementCount); for(counter = 0; counter < elementCount; counter++){ scanf("%d", &inputArray[counter]); } /* Input Validation * Input Elements must be in increasing order */ for(counter = 1; counter < elementCount; counter++){ if(inputArray[counter] < inputArray[counter -1]){ printf("Invalid Input: elements not in increasing order \n"); return 1; } } /* * All the elemets before writeIndex are unique. * readIndex scan elements from left to write and * tries to find a duplicate element. */ for(readIndex=1, writeIndex=0; readIndex < elementCount; readIndex++){ if(inputArray[readIndex] != inputArray[writeIndex]){ writeIndex++; inputArray[writeIndex] = inputArray[readIndex]; } } /* Print unique element */ printf("Unique Elements\n"); for(counter = 0; counter < writeIndex + 1; counter++){ printf("%d ", inputArray[counter]); } getch(); return 0; }
Program Output
Enter number of elements in array: 8 Enter 8 numbers in increasing order 0 0 1 2 2 2 3 7 Unique Elements 0 1 2 3 7