zoukankan      html  css  js  c++  java
  • 冒泡排序,折半查找

    ------------------------------------冒泡排序------------------------------------

    定义接口:抽象出排序数组中元素的不同状态(可否比较)

    public interface SortInter {
    
    	public <T extends Comparable<T>> void sort(T[] list);//T实例本身就是可以比较的
    	
    	public <T> void sort(T[] list,Comparator<T> com);//通过自定义比较器比较两个T
    }
    

      

    实现接口:具体实现排序方法

    public class TestSort implements SortInter {
    
    	@Override
    	public <T extends Comparable<T>> void sort(T[] list) {
    		boolean swapped = true;//根据上次排序有没有交换判断是否退出外层循环
    		for (int i = 1,len = list.length; i < len && swapped; i++) {
    			swapped = false;
    			for (int j = 0; j < len - i; j++) {//每一次内层循环的循环次数都较前一次减一
    				if(list[j].compareTo(list[j+1]) > 0) {
    					T temp ;
    					temp = list[j];
    					list[j] = list[j+1];
    					list[j+1] = temp;
    					swapped = true;
    				}
    			}
    		}
    	}
    
    	@Override
    	public <T> void sort(T[] list, Comparator<T> com) {
    		boolean swapped = true;
    		for (int i = 1,len = list.length; i < len && swapped; i++) {
    			for (int j = 0; j < len - i; j++) {
    				if(com.compare(list[j], list[j+1]) > 0) {
    					T temp ;
    					temp = list[j];
    					list[j] = list[j+1];
    					list[j+1] = temp;
    					swapped = true;
    				}
    			}
    		}
    	}
    	
    	public static void main(String[] args) {
    		Integer[] arr = {3,1,23,21,12,2,121,24};
    		new TestSort().sort(arr);
    		System.out.println(Arrays.toString(arr));
    		String[] strArr = {"asd","as","Asf","Cbc","cxz","bca"};
    		Comparator<String> com = new Comparator<String>() {
    			@Override
    			public int compare(String str1, String str2) {
    				return str1.compareTo(str2);
    			}
    		};
    		new TestSort().sort(strArr,com);
    		for (int i = 0; i < strArr.length; i++) {
    			System.out.println(strArr[i]+"	");
    		}
    	}
    }
    

    控制台结果:

    [1, 2, 3, 12, 21, 23, 24, 121]
    Asf	
    Cbc	
    as	
    asd	
    bca	
    cxz	
    

      

    ------------------------------------折半查找------------------------------------

    package com.qf.test1;
    
    public class TestSearch {
    
    	/**
    	 * 使用循环实现折半查找
    	 * @param t
    	 * @param key
    	 * @return
    	 */
    	public static <T extends Comparable<T>> int binarySearch(T[] t , T key) {
    		int low = 0;
    		int high = t.length - 1;
    		int mid ;
    		while(low <= high) {
    			mid = low + (high-low)/2;
    			//不使用(low+high)/2是因为可能low+high的值溢出int范围无法计算;还可以使用右移>>1或者无符号右移>>>1
    			if(t[mid].compareTo(key) > 0) {
    				high = mid - 1;
    			}else if(t[mid].compareTo(key) < 0){
    				low = mid + 1;
    			}else {
    				return mid;
    			}
    		}
    		return -1;
    	}
    	
    	/**
    	 * 使用递归实现折半查找
    	 * @param t
    	 * @param low
    	 * @param high
    	 * @param key
    	 * @return
    	 */
    	public static <T extends Comparable<T>> int binarySearch(T[] t,int low,int high,T key) {
    		if(low <= high) {
    			int mid = low + (high-low)/2;
    			if(t[mid].compareTo(key) > 0) {
    				return binarySearch(t,low,mid-1,key);
    			}else if(t[mid].compareTo(key) < 0) {
    				return binarySearch(t,low,mid-1,key);
    			}else {
    				return mid;
    			}
    		}
    		
    		return -1;
    	}
    	
    	public static void main(String[] args) {
    		Integer[] arr = {1, 2, 3, 12, 21, 23, 24, 121};
    		
    		System.out.println("index:"+TestSearch.binarySearch(arr, 12));
    	}
    	
    }

    控制台打印

    index:3
    

      

  • 相关阅读:
    Centos7安装nodejs(npm)
    Centos7安装docker
    在目标服务器Centos7上安装 GitLab Runner
    PC端,知乎在不想登录的情况下一打开就弹出登录框的无痛解决办法
    mac下webstrom卡顿快速解决办法
    解决项目中使用momentJS文件 体积过大的问题
    发布订阅模式及多种实现方式:
    「react进阶」react开发者的不得不知道的八条优化建议
    Gulp、Webpack 有什么区别
    react 源码解析(上)
  • 原文地址:https://www.cnblogs.com/qf123/p/8568487.html
Copyright © 2011-2022 走看看