黑马程序员——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学习型技术博客、期待与您交流!------------

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,这是一个关于排序和二分查找的问题。 首先,我们需要对待查找的数据进行排序,这里就采用一种简单的排序算法——冒泡排序冒泡排序的基本思想是:从第一个元素开始,比较相邻的两个元素大小,如果前一个元素大于后一个元素,则交换它们的位置,依次比较下去,直到最后一个元素。 接下来,我们可以用二分查找查找指定的元素。二分查找的基本思想是:将待查找的区间分成两个部分,取中间位置的元素与目标元素进行比较,如果相等,则找到了目标元素;如果目标元素大于中间元素,则在后半部分继续查找;如果目标元素小于中间元素,则在前半部分继续查找。 下面是示例代码: ```python def bubble_sort(arr): n = len(arr) for i in range(n): for j in range(0, n-i-1): if arr[j] > arr[j+1]: arr[j], arr[j+1] = arr[j+1], arr[j] def binary_search(arr, left, right, target): if left > right: return -1 mid = (left + right) // 2 if arr[mid] == target: return mid elif arr[mid] < target: return binary_search(arr, mid+1, right, target) else: return binary_search(arr, left, mid-1, target) # 测试代码 arr = [5, 2, 8, 3, 9, 1] bubble_sort(arr) print(arr) print(binary_search(arr, 0, len(arr)-1, 3)) ``` 输出结果: ``` [1, 2, 3, 5, 8, 9] 2 ``` 在这个示例代码中,我们先用冒泡排序将待查找的数组进行了排序,然后调用二分查找函数查找目标元素 3,最终返回了它的索引位置 2。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值