javase 排序 和 查找

1 冒泡排序 :

	public static void main(String[] args) {
		//test1();
		//System.out.println(factorial(5));
		int[] value = {3,1,6,2,9};
		sort(value);
		
	}
	
	
	/**
 i = 0 j = 0[1, 3, 6, 2, 9]
 i = 0 j = 1[1, 3, 6, 2, 9]
 i = 0 j = 2[1, 3, 2, 6, 9]
 i = 0 j = 3[1, 3, 2, 6, 9]
 i = 1 j = 0[1, 3, 2, 6, 9]
 i = 1 j = 1[1, 2, 3, 6, 9]
 i = 1 j = 2[1, 2, 3, 6, 9]
 i = 2 j = 0[1, 2, 3, 6, 9]
 i = 2 j = 1[1, 2, 3, 6, 9]
 i = 3 j = 0[1, 2, 3, 6, 9]
	 * @param value
	 */
	private static void sort(int[] value) {
		int temp ;
		for(int i=0; i<value.length; i++){ // 趟数
			for(int j=0; j<value.length -1 - i; j++ ){数组内元素比较次数 // 内循环比较 每一次内循环比较结束后 都会讲最大/小 放在数组最右侧 下次内循环时,最右侧的这个值直接排除比较,这就是value.length -1 - i的缘由
				// 在内循环下 两两比较  两两比较中得到最大/小值,然后在内循环的下一个j赋值过来后 这个最大/最小值在和数组下一个值比较和互换 最终在整个内循环一次 eg i=0 j=0,内循环结束后 将最大/最小值冒泡到数组最右侧位置
				if(value[j] > value[j+1]){
					temp = value[j];
					value[j] = value[j+1];
					value[j+1] = temp;
				}
				System.out.print(" i = " + i + " j = " + j);
				System.out.print(Arrays.toString(value));
				System.out.println("");
			}
		}
	}

附图是冒泡的别的数据例子,只是表示 趟数和次数的关系:



 

上面版本是 趟数固定,减少次数比较。



 

如下是 冒泡排序 减少 趟数写法:

package beijing.lele;

import java.util.Arrays;

public class Sort {

	public static void main(String[] args) {
		
		int[] arrs = {4,1,2,3};
		sort(arrs) ;
		sortFinal(arrs);
		System.out.println(Arrays.toString(arrs));
		

	}
	
	
	/**  只是减少每趟下比较次数,这样会增加多余趟数的循环,这里循环了三趟
this is the 0趟;
[1, 4, 2, 3]
[1, 2, 4, 3]
[1, 2, 3, 4]
this is the 1趟;
[1, 2, 3, 4]
[1, 2, 3, 4]
this is the 2趟;
[1, 2, 3, 4]
[1, 2, 3, 4]
	 * @param arrs
	 */
	public static void sort(int[] arrs) {
		for(int i=0; i<arrs.length-1; i++) {
			System.out.println("this is the " + i + "趟;");
			for(int j=0; j<arrs.length-1-i; j++) {
				int tmp;
				if(arrs[j] > arrs[j+1]) {
					tmp = arrs[j+1];
					arrs[j+1] = arrs[j];
					arrs[j] = tmp;
				}
				System.out.println(Arrays.toString(arrs));
			}
			
		}
		
	}
	
	/** 这里只会循环2趟,
this is the 0趟;
[1, 4, 2, 3]
[1, 2, 4, 3]
[1, 2, 3, 4]
[1, 2, 3, 4]
this is the 1趟;
[1, 2, 3, 4]
[1, 2, 3, 4]
[1, 2, 3, 4]
[1, 2, 3, 4]
	 * @param arr
	 */
	   public static void sortFinal(int[] arr){  
           boolean sorted= true;  
           int len =arr.length;  
           for(int j=0;j<len-1;j++){ //趟数  
               sorted =true; //假定有序  
               System.out.println("this is the " + j + "趟;");
               for(int i=0;i<len-1-j;i++){ //次数  
                   if(arr[i]>arr[i+1]){  
                       int temp = arr[i];  
                       arr[i] =arr[i+1];  
                       arr[i+1] =temp;  
                       sorted =false; //假定失败  
                   }  
                   System.out.println(Arrays.toString(arr));  
               }  
               System.out.println(Arrays.toString(arr));
               if(sorted){ //上面这一趟比较下来,如果没有互换位置的,那么就终止下一趟的比较  
                   break;  
               }  
           }  
       }  
	     

}

2  二分法查找 :   node(int index) 

javase 自定义LinkedList 编辑

 

猜你喜欢

转载自chengjianxiaoxue.iteye.com/blog/2397238