Java数组的高级部分:排序问题+折半查找

1.冒泡排序

(1)冒泡排序的思想
          两两比较,大的往后放,第一次比较完毕之后,最大值就出现在了最大索引处!然后依次这样比较,就可以得到一个排好序的数组.
(2)冒泡排序的规律

 1)一定是两两比较,大的往后放,第一次比较完毕,最大值在最大索引处
 2)第一次全部都比较,确定数组的最大值

  第一次比较,有0个元素不比
  第二次比较,有1个元素不比
  第三次比较,有2个元素不比

   ......
元素比较的次数:(数组长度-1)次
(3)冒泡排序算法
public static void BubbleSort(int[] arr) {
		for (int x = 0; x < arr.length - 1; x++) {
			for (int y = 0; y < arr.length - 1 - x; y++) {
				if (arr[y] > arr[y + 1]) {
					int temp = arr[y];
					arr[y] = arr[y + 1];
					arr[y + 1] = temp;
				}
			}
		}
	}
2.选择排序

(1)选择排序的思想
          从0索引对应的元素依次和后面索引对应的元素进行比较,小的往前放,第一次比较完毕之后,最小值就出现在最小索引处,然后依次这样比较,就可以得到一个排好序的数组.
(2)选择排序的规律

 1)从0索引开始依次和后面索引对应的元素进行比较,小的数据往前放,最小值在最小索引处.
 2)用0索引对应的值依次和后面索引对应的值比较

用1索引对应的值依次和后面索引对应的值比较
......

arr.length-2 索引对应的元素和arr.length-1索引对应的值比较
(3)选择排序算法
// 选择排序的功能
	public static void selectSort(int[] arr) {
		for (int x = 0; x < arr.length - 1; x++) {
			for (int y = x + 1; y < arr.length; y++) {
				if (arr[x] > arr[y]) {
					int temp = arr[x];
					arr[x] = arr[y];
					arr[y] = temp;
				}
			}
		}
	}
3.折半查找

(1) 前提:一定是数组中的元素有序的!
(2)折半查找的中心思想:
           直接将数组元素减半,方便开发者使用,计算出中心索引,大了左边找,小了右边找.
(3) 核心思想:

   A:定义最小索引和最大索引
   B:计算中间索引
   C:中间索引对应的元素和需要查找的元素比较
       相等,直接返回中间索引
       不相等:
              大了,左边找  max = mid -1 ;
              小了,右边找  min = mid + 1 ;
   D:重新计算中间索引 ,回到B继续查找
(4)折半查找算法
public static int search(int[] arr,int value) {
		//1)定义数组中的最小索引和最大索引
		int min = 0 ;
		int max = arr.length -1 ;
		
		//2) 计算出中间索引
		int mid = (max+min)/2 ;
		
		//3)拿中间索引对应的元素和需要查找的元素进行比较
		//如果相等,返回
		while(arr[mid]!=value) {
			//不相等
			if(arr[mid] >value) {
				 max = mid -1 ;
			}else {
				 min = mid + 1 ;
			}
			
			//如果这value在数组中找不到,找不到返回-1
			if(min>max) {
				return -1 ;
			}
			
			//重新计算出中间索引
			mid = (max+min)/2 ;
		}
		return mid ;
	}

猜你喜欢

转载自blog.csdn.net/xing_ran_ran/article/details/80086239
今日推荐