- 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