冒泡排序
冒泡(Bubble Sort)排序是一种简单排序算法,它通过依次比较交换两个相邻元素实现功能。每一次冒泡会让至少一个元素移动到它应该在的位置上,这样 n 次冒泡就完成了 n 个数据的排序工作。
这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端(升序或降序排列),就如同碳酸饮料中二氧化碳的气泡最终会上浮到顶端一样,故名“冒泡排序”。
冒泡排序算法实现步骤:
- 比较相邻的元素,如果第一个比第二个大,就交换他们两个。
- 对每一对相邻元素重复上述工作,从第一对到最后一对。完成后,最大的数会放到最后位置。
- 针对所有的元素重复以上的步骤,除了最后一个。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
冒泡排序过程具体见下图:
package com.briup.chap04;import java.util.Arrays;public class Test06_Sort {public static void main(String[] args) {int[] array = {4,5,3,2,1};//排序bubbleSort(array);//遍历System.out.println(Arrays.toString(array));}//冒泡排序public static void bubbleSort(int[] arr) {//每次排序,可以将 未排序序列中 最大值 放到最后位置//len个成员,一共排序len-1次即可for(int i = 0; i < arr.length-1; i++) {//每次排序,借助交换 相邻两个数,实现 最大值移动到最后位置for(int j = 0; j < arr.length-1-i; j++) {if(arr[j] > arr[j+1]) {arr[j] = arr[j] ^ arr[j+1];arr[j+1] = arr[j] ^ arr[j+1];arr[j] = arr[j] ^ arr[j+1];}}System.out.print("第"+(i+1)+"次排序后: ");System.out.println(Arrays.toString(arr));} }
}
二分查找
在一个有序序列中查找其中某个元素,我们可以采用二分查找(折半查找),它的基本思想是:将n个元素分成个数大致相同的两半,取a[n/2]与欲查找的x作比较,如果x=a[n/2]则找到x,算法终止;如 果x<a[n/2],则我们只要在数组a的左半部继续搜索x;如果x>a[n/2],则我们只要在数组a的右半部继续搜索x。
package com.briup.chap04;public class Test06_BinarySearch {//二分查找:针对有序序列进行 查找public static void main(String[] args) {int[] arr = {1, 3, 4, 5, 7, 9, 10};int index = binarySearch(arr, 1);System.out.println("1: " + index);index = binarySearch(arr, 2);System.out.println("2: " + index);index = binarySearch(arr, 10);System.out.println("10: " + index);}//二分查找算法,如果value存在arr中,则返回元素位置,如果找不到返回-1public static int binarySearch(int[] arr,int value) {int start = 0;int end = arr.length - 1;int mid;while(true) {mid = (start+end) / 2;if(value == arr[mid])return mid;else if(value > arr[mid]) {start = mid + 1;}else {end = mid - 1;}//当start > end 循环结束if(start > end)break;}return -1;}
}