• 《java入门第一季》之Arrays类前传(排序问题)


    一:冒泡排序
    /*
     * 数组排序之冒泡排序:
     * 		相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处
     * 
     * 引申:
     * 利用冒泡排序法,可以获取一个数组的最大值(先冒泡排序,取最后一个值)和最小值(调用冒泡排序,取第一个值)
     */
    public class ArrayDemo {
    	public static void main(String[] args) {
    		// 定义一个数组
    		int[] arr = { 24, 69, 80, 57, 13 };
    		System.out.println("排序前:");
    		printArray(arr);
    
    		//由于可能有多个数组要排序,所以要写成方法
    		bubbleSort(arr);
    		System.out.println("排序后:");
    		printArray(arr);
    	}
    	
    	//冒泡排序代码
    	public static void bubbleSort(int[] arr){
    		for (int x = 0; x < arr.length - 1; x++) {//外循环控制比较的次数(arr.length-1)轮
    			for (int y = 0; y < arr.length - 1 - x; y++) {// arr.length - 1是为了防止数据越界,// arr.length - 1 - x是为了减少比较的次数
    				if (arr[y] > arr[y + 1]) {//前面的数大于后边的数。交换
    					int temp = arr[y];
    					arr[y] = arr[y + 1];
    					arr[y + 1] = temp;
    				}
    			}
    		}
    	}
    
    	// 遍历功能
    	public static void printArray(int[] arr) {
    		System.out.print("[");
    		for (int x = 0; x < arr.length; x++) {
    			if (x == arr.length - 1) {
    				System.out.print(arr[x]+"]");
    			} else {
    				System.out.print(arr[x] + ", ");
    			}
    		}
    	}
    }


    二:选择排序

    /*
     * 数组排序之选择排序:
     * 		从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现在了最小索引处
     */
    public class ArrayDemo {
    	public static void main(String[] args) {
    		// 定义一个数组
    		int[] arr = { 24, 69, 80, 57, 13 };
    		System.out.println("排序前:");
    		printArray(arr);
    		
    		//用方法改进
    		selectSort(arr);
    		System.out.println("排序后:");
    		printArray(arr);
    
    	}
    
    	public static void selectSort(int[] arr){
    		for(int x=0; x<arr.length-1; x++){//总共进行arr.length-1轮
    			for(int y=x+1; y<arr.length; y++){
    				if(arr[y] <arr[x]){//如果后面的数小于前面的数,交换,始终使得前面的为小值
    					int temp = arr[x];
    					arr[x] = arr[y];
    					 arr[y] = temp;
    				}
    			}
    		}
    	}
    
    	// 遍历功能
    	public static void printArray(int[] arr) {
    		System.out.print("[");
    		for (int x = 0; x < arr.length; x++) {
    			if (x == arr.length - 1) {
    				System.out.print(arr[x]);
    			} else {
    				System.out.print(arr[x] + ", ");
    			}
    		}
    		System.out.println("]");
    	}
    }

    三:二分查找

    /*
     * 查找:
     * 		基本查找:数组元素无序(从头找到尾)
     * 		二分查找(折半查找):数组元素有序
     * 
     * 分析:
     * 		A:定义最大索引,最小索引
     * 		B:计算出中间索引
     * 		C:拿中间索引的值和要查找的值进行比较
     * 			相等:就返回当前的中间索引
     * 			不相等:
     * 				大	左边找
     * 				小	右边找
     * 		D:重新计算出中间索引
     * 			大	左边找
     * 				max = mid - 1;
     * 			小	右边找
     * 				min = mid + 1;
     * 		E:回到B
     */
    public class ArrayDemo {
    	public static void main(String[] args) {
    		//定义一个数组
    		int[] arr = {11,22,33,44,55,66,77};
    		
    		//写功能实现
    		int index = getIndex(arr, 33);
    		System.out.println("index:"+index);
    		
    		//假如这个元素不存在后有什么现象呢?
    		index = getIndex(arr, 333);
    		System.out.println("index:"+index);//-1
    	}
    	
    	
    	public static int getIndex(int[] arr,int value){
    		//定义最大索引,最小索引
    		int max = arr.length -1;
    		int min = 0;
    		
    		//计算出中间索引
    		int mid = (max +min)/2;
    		
    		//拿中间索引的值和要查找的值进行比较
    		while(arr[mid] != value){//while实现循环
    			if(arr[mid]>value){//大	
    				max = mid - 1;//左边找
    			}else if(arr[mid]<value){//小
    				min = mid + 1;//右边找
    			}
    			
    			//加入判断
    			if(min > max){//找不到
    				return -1;
    			}
    			
    			mid = (max +min)/2;//重新取新一轮数组的中间值
    		}
    		
    		return mid;//arr[mid] = value
    	}
    }



  • 相关阅读:
    JMeter java模拟多用户高并发请求测试(json,form表单)
    mysql 存储过程 示例
    在C#中如何设置DateTimePicker控件显示“年-月-日 时:分:秒”的格式
    U盘或光盘启动的Win7-8-10的PE系统制作步骤
    SuperMap Objects中如何正确获取选择Selection以及提示“遇到一个未知错误,请重新打开窗口。ErrorMessage:尝试读取或写入受保护的内存。这通常指示他内存已损坏”
    C#中定义委托的思路
    docker(5):数据的管理
    docker(4)docker的网络,自定义网桥
    docker(3)容器管理命令
    docker (2) 通用/镜像命令
  • 原文地址:https://www.cnblogs.com/wanghang/p/6299826.html
Copyright © 2020-2023  润新知