배열의 요소 중 특정 값 삭제하는 방법

정렬되지 않은 배열에서 요소를 삭제하는 방법

삭제 연산은 선형 탐색을 이용하여 삭제할 요소를 검색한 후 요소를 이동시킨 후 삭제 연산을 진행합니다.

public class UnsortedDelete {
	static int findElement(int arr[], int n, int key) {
		for(int i =0; i < n; i++) {
			if(arr[i] == key) return i;
		}
		return -1;
	}
	
	static int deleteElement(int arr[], int n, int key) {
		int pos = findElement(arr, n ,key);
		
		if(pos == -1) {
			System.out.println("element not found");
			return n;
		}
		
		for(int i = pos; i < n -1; i++) {
			arr[i] = arr[i+1];
		}
		return n - 1;
	}
	
	public static void main(String args[])
    {
        int i;
        int arr[] = { 10, 50, 30, 40, 20 };
 
        int n = arr.length;
        int key = 30;
        
        n = deleteElement(arr, n, key);
        
        for (i = 0; i < n; i++)
            System.out.print(arr[i] + " ");
    }
}

삭제할 원소를 찾은 후 해당 인덱스부터 하나씩 왼쪽으로 이동시켜 삭제시킵니다.

 

정렬된 배열에서 요소를 삭제하는 방법

정렬된 배열에서 삭제 연산은 이진 탐색을 이용하여 삭제할 요소를 검색한 후 해당 요소를 이동시킨 후 삭제를 시킵니다.

public class SortedDelete {

	public static void main(String[] args) {
		int i;
        int arr[] = { 10, 50, 30, 40, 20 };
 
        int n = arr.length;
        int key = 30;
        
        n = deleteElement(arr, n, key);
        
        for (i = 0; i < n; i++)
            System.out.print(arr[i] + " ");
	}
	
	static int binarySearch(int arr[], int low, int high, int key) {
		if(high < low) return -1;
		
		int mid = (low + high) / 2;
		
		if(key == arr[mid]) return mid;
		else if(key > arr[mid]) return binarySearch(arr, mid + 1, high, key);
		else return binarySearch(arr, low, mid - 1, key);
	}
	
	static int deleteElement(int arr[], int n, int key) {
		int pos = binarySearch(arr, 0, n ,key);
		
		if(pos == -1) {
			System.out.println("element not found");
			return n;
		}
		
		for(int i = pos; i < n -1; i++) {
			arr[i] = arr[i+1];
		}
		return n - 1;
	}
}