黑马程序员——Java基础--冒泡、选择、二分查找

-----------android培训java培训、java学习型技术博客、期待与您交流!------------

第四讲 冒泡排序、选择排序、二分查找

一、冒泡排序

1、冒泡排序的原理

冒泡排序的原理就是相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处。

2、画图说明

2、程序实现

package cn.itcast.homework;
/*
 * 编写数组工具类,完成冒泡排序
 * 分析:
 * 1.相邻元素两两比较,大的往后放,第一次完毕,最大值出现在了最大索引处
 */
public class BubbleSortTest {
	public static void main(String[] args) {
		//定义一个数组
		int[] arr = {12,33,70,55,44};
		bianli(arr);
		bubblesort(arr);
		bianli(arr);
	}
	//冒泡排序
	public static void bubblesort(int[] arr){
		for (int y = 0; y < arr.length-1; y++) {
			for (int i = 0; i < arr.length-1-y; i++) {//-y:意思 是第n次比较过后,最后以为是最大的就不用再比较了
				if (arr[i]>arr[i+1]) {
					int temp = arr[i+1];
					arr[i+1]=arr[i];
					arr[i]=temp;
				}
			}
		}		
	}
	//遍历
	public static void bianli(int[] arr){
		System.out.print("[");
		for (int i = 0; i < arr.length; i++) {
			if (i==arr.length-1) {
				System.out.println(arr[i]+"]");
			}else{
				System.out.print(arr[i]+",");
			}
		}
	}
}

结果为:

[12,33,70,55,44]
[12,33,44,55,70]

二、选择排序

1、原理

从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现在了最小索引处

2、画图说明

3、程序实现

<span style="color:#000000;">package cn.itcast.homework;
/*
 * 编写数组工具类,完成选择排序
 * 从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现在了最小索引处 
 */
public class SalarySortTest {
	public static void main(String[] args) {
		int[] arr = {55,33,70,12,8};
		bianli(arr);
		salarysort(arr);
		bianli(arr);
	}
	public static void salarysort(int[] arr){
		for (int index = 0; index < arr.length-1; index++) {
			for (int i = 1+index; i < arr.length; i++) {
				if (arr[i]<arr[index]) {
					int temp = arr[i];
					arr[i] = arr[index];
					arr[index] = temp;
				}
			}
		}
		
	}
	public static void bianli(int[] arr){
		System.out.print("[");
		for (int i = 0; i < arr.length; i++) {
			if (i==arr.length-1) {
				System.out.println(arr[i]+"]");
			}else{
				System.out.print(arr[i]+",");
			}
		}
	}
}</span>

结果为:

[55,33,70,12,8]
[8,12,33,55,70]
三、二分查找

1、原理

每一次都查中间的那个元素,比较大或者小就能减少一般的元素,注意:该数组元素有序

2、画图说明

3、程序实现

<span style="color:#000000;">package cn.itcast.homework;
/*
 * 编写数组工具类,完成二分查找
 * 	分析:每一次都查中间的那个元素,比较大或者小就能减少一般的元素
 *  注意:如果数组无序,就不能使用二分查找。
 *  	因为如果你排序了,但是你排序的时候已经改变了我最原始的元素索引。
 */
public class BinarySortTest {
	public static void main(String[] args) {
		int[] arr = {11,22,33,44,55,66,77,88,99,100,110,120,130};
		int s = binarySort(arr,25);
		System.out.println("要查找的角标为:"+s);
	}
	public static int binarySort(int[] arr, int value){
		int minindex = 0;
		int maxindex = arr.length-1;
		while (minindex<=maxindex) {
			int midindex = (minindex+maxindex)/2;
			if (arr[midindex]==value) {
				return midindex;
			}else if(arr[midindex]<value){
				minindex=midindex+1;
			}else if (arr[midindex]>value) {
				maxindex=midindex-1;
			}
		}
		return -1;
	}
}</span>

结果为:
要查找的角标为:-1

-----------android培训java培训、java学习型技术博客、期待与您交流!------------

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值