Java实现冒泡排序的基础算法
原理:比较两个相邻的元素,将值大的元素交换到右边
如果要排序 {5,8,20,1,6,9,3,15},这几个数
首先第一回排序:
5和8比较,5小于8,不换位置,{5,8,20,1,6,9,3,15}
8与20比较,8小于20,不换位置 ,{5,8,20,1,6,9,3,15}
20与1比较,20大于1,交换位置,{5,8,1,20,6,9,3,15}
20与6比较,20大于6,交换位置,{5,8,1,6,20,9,3,15}
20与9比较,20大于9,交换位置,{5,8,1,6,9,20,3,15}
20与3比较,20大于3,交换位置,{5,8,1,6,9,3,20,15}
20与15比较,20大于15,交换位置,{5,8,1,6,9,3,15,20}
第一回排序完成
接着重复进行第二回、第三回以此类推,直到排序结果完成从小到大排序为止
Java算法描述如下:
package cn.zhazong710.test;
import java.util.Arrays;
public class TestBubbleSort {
public static void main(String[] args) {
int[] values = {5,8,20,1,6,9,3,15};
int temp = 0;
for(int i=0;i<values.length-1;i++){
for(int j=0;j<values.length-1-i;j++) {
//比较大小换顺序
if(values[j]>values[j+1]){
temp = values[j];
values[j] = values[j+1];
values[j+1] = temp;
}
System.out.println(Arrays.toString(values));
}
System.out.println("##################");
}
}
}
运行结果如下:
[5, 8, 20, 1, 6, 9, 3, 15]
[5, 8, 20, 1, 6, 9, 3, 15]
[5, 8, 1, 20, 6, 9, 3, 15]
[5, 8, 1, 6, 20, 9, 3, 15]
[5, 8, 1, 6, 9, 20, 3, 15]
[5, 8, 1, 6, 9, 3, 20, 15]
[5, 8, 1, 6, 9, 3, 15, 20]
##################
[5, 8, 1, 6, 9, 3, 15, 20]
[5, 1, 8, 6, 9, 3, 15, 20]
[5, 1, 6, 8, 9, 3, 15, 20]
[5, 1, 6, 8, 9, 3, 15, 20]
[5, 1, 6, 8, 3, 9, 15, 20]
[5, 1, 6, 8, 3, 9, 15, 20]
##################
[1, 5, 6, 8, 3, 9, 15, 20]
[1, 5, 6, 8, 3, 9, 15, 20]
[1, 5, 6, 8, 3, 9, 15, 20]
[1, 5, 6, 3, 8, 9, 15, 20]
[1, 5, 6, 3, 8, 9, 15, 20]
##################
[1, 5, 6, 3, 8, 9, 15, 20]
[1, 5, 6, 3, 8, 9, 15, 20]
[1, 5, 3, 6, 8, 9, 15, 20]
[1, 5, 3, 6, 8, 9, 15, 20]
##################
[1, 5, 3, 6, 8, 9, 15, 20]
[1, 3, 5, 6, 8, 9, 15, 20]
[1, 3, 5, 6, 8, 9, 15, 20]
##################
[1, 3, 5, 6, 8, 9, 15, 20]
[1, 3, 5, 6, 8, 9, 15, 20]
##################
[1, 3, 5, 6, 8, 9, 15, 20]
##################
Java实现二分法查找基础算法
原理:首先需要排好顺序,其次将排序好的数据分成各一半,比较所查找的数据与中间数据大小,接着再次分半查找
如果要查找{5,8,20,1,6,9,3,15}数据中的5
首先排序成{1, 3, 5, 6, 8, 9, 15, 20},比较中间数6,5小于6
在{1,3,5}中查找,比较中间数3,5大于3,查找到5
Java算法描述如下:
package cn.zhazong710.test;
import java.util.Arrays;
public class TestBinarySearch {
public static void main(String[] args) {
int[] arr = {5,8,20,1,6,9,3,15};
Arrays.sort(arr); //将数组排序
System.out.println(Arrays.toString(arr));
System.out.println(myBinarySearch(arr, 5));
//查找值为5,打印出5的位置
}
public static int myBinarySearch(int[] arr,int value){
int low = 0;
int high = arr.length-1;
while(low<=high){
int mid = (low+high)/2;
if(value==arr[mid]){
return mid;
}
if(value>arr[mid]){
low = mid+1;
}
if(value<arr[mid]){
high = mid-1;
}
}
return -1;
}
}
运行结果如下:
[1, 3, 5, 6, 8, 9, 15, 20]
2