实现数组元素的排序、查找以及删除

数组元素的删除
	删除第一个操作是排序,第二个操作是查找,你可以不排序,但一定要查找
	          
	如果不排序,只能用普通的查找,排序了可以用二分查找法

	首先要先找到要删除数字的下标,在进行覆盖,后面一个赋给前面一个,总个数减1

	8 16 19 25 29 35 48
	deleteNum = 25
	1.找到要删除元素的下标 deleteIndex = 3
	2.从要删除下标开始,后面一个元素值给前面一个元素-覆盖
	  nums[i] = nums[i+1] 
	3.数组总长度减1

	只是障眼法,并不是真正地删掉了,由于数组的特殊性,数组大小一旦确定就无法改变
import java.util.Arrays;
import java.util.Scanner;

/**
 * 
 * 数组元素的删除
 * @author Monster丶ZF
 * @version1.8
 * @data 2019年4月15日
 * @remakeTODO
 */
public class DeleteDemo {
	public static void main(String[] args) {
		//1.找到要删除元素的下标 deleteIndex , 记录下来
		//2.从要删除下标开始,后面一个元素值给前面一个元素-覆盖
		//		  nums[i] = nums[i+1] 
		//3.数组总长度减1
		Scanner input = new Scanner(System.in);
		final int N = 10;
		int[] nums = new int[N];
		for (int i = 0; i < nums.length; i++) {
			nums[i] = (int)(Math.random()*1000)%201; // 0-200 
		}
		System.out.println("排序前:");
		for (int i = 0; i < nums.length; i++) {
			System.out.print(nums[i] + "\t");
		}
		System.out.println();
		Arrays.sort(nums);
		System.out.println("排序后:");
		for (int i = 0; i < nums.length; i++) {
			System.out.print(nums[i] + "\t");
		}
		System.out.println();
		System.out.println("请输入要删除的元素:");
		int deleteNums = input.nextInt();   //  相当于输入要查找的元素
		int deleteIndex = -1;                //要删除元素的下标
		//1.用顺序查找来查找要删除数组元素的下标
//		 for (int i = 0; i < nums.length; i++) {
//        	 if(deleteNums == nums[i]){
//        		// System.out.println("找到了!");  
//        		 deleteIndex = i;
//        		        break;
//        	 }
//      	
//		}
//         if(deleteIndex == -1){
//    		 System.out.println("很遗憾,没有找到您要删除的数字");
//    		 System.exit(0);
//    	 }else{
//    		 System.out.println("找到了!要删除元素的下标为:" + deleteIndex);
//    	 }
         
          //2.用二分法来查找找删除数组元素的下标
		
         int low =0;                //下届下标 
         int high =nums.length - 1; //上届下标
         while(high >= low){  
        	 int mid =(high + low) / 2;
        	 if(deleteNums < nums[mid]){ //1、如果key小于中间元素,只需要在数组的前一半元素中继续查找
        		 high = mid -1;
        	 }else if(deleteNums > nums[mid]){ //3、如果key大于中间元素,只需要在数组的后一半元素中继续查找
        		 low = mid +1; 
        	 }else{                     //2、如果key和中间元素相等,匹配成功,查找结束
        		System.out.println("找到了要删除元素的下标为:" + mid);
        		deleteIndex = mid;
        		break;
        	 }
         }
         if(deleteIndex == -1){ //等价于isFind = 0;
        	 System.out.println("很抱歉,没有找到您要删除的元素");
        	 System.exit(0);   //正常退出JAVA程序
         }
         
         
         
         
         
         System.out.println("删除后:");
           int count = nums.length;
          count--; 
         for (int i = deleteIndex; i < nums.length-1; i++) {
			nums[i] = nums[i + 1];
		}
        for (int i = 0; i < count ; i++) {
        	System.out.print(nums[i] + "\t");	
		}
        
		
		input.close();

	}

}

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/w15977858408/article/details/89318359
今日推荐