冒泡排序:
public static void main(String[] args) {
//冒泡排序法
int[] a = {3,5,2,4,1};
int temp = 0;
for (int i=a.length-1;i>=0;i--){
for (int z=0;z<i;z++){
if (a[z]>a[z+1]){
//前比后大,那么需要调换位置
temp = a[z+1];
a[z+1] = a[z];
a[z] = temp;
}
}
}
//遍历
for (int j = 0; j<a.length; j++){
System.out.println(a[j]);
}
}
二分法查找:
public static void main(String[] args) {
//给定一个长度为10的有序数组(从小到大),要找到13这个元素
int[] arr = {1,5,13,15,18,19,20,22,24,29};
int mubiao = 19;
int index = erfencz(arr,mubiao);
System.out.println(index == -1 ? "不存在13这个元素":"13的下标为"+index);
}
private static int erfencz(int[] arr,int mubiao) {
int begin = 0;
int end = 9;
int index = 0;
boolean b = false;
//int i = 0;
while (begin<=end){
int mid = (begin + end)/2; //第一次是4
if (arr[mid] == mubiao){
//如果相等,说明已经拿到了目标,停止循环
index = mid;
b = true;
//i++;
break;
}
if (arr[mid] > mubiao){
//如果arr[mid] > mubiao,说明目标元素在左边,end = mid-1
end = mid-1;
}
if (arr[mid] < mubiao){
//如果arr[mid] < mubiao,说明目标元素在右边,begin = mid+1
begin = mid +1;
}
}
if (b){
return index;
}else{
return -1;
}
}
选择排序:
public static void main(String[] args) {
//给定一个数组:arr[3,5,6,2,4],要求从小到大排序
int[] arr = {3,5,6,2,4,1};
//表层循环主要是假设数组中元素为最小,任何一个都可能最小
for (int i = 0;i<arr.length-1;i++){
//用于后面的对比,若min值变化则需要交换位置,反之则说明下标为min的元素暂时最小
int min = i;
//这层for循环的目的是将假定的最小元素和其他元素对比
for (int j = i+1;j<arr.length;j++){
if (arr[min] > arr[j]){
//拿到最小元素的下标
min = j;
}
}
//说明最小的已经换了,需要把min上的换成当前的
if (min != i){
int temp = arr[i];//大的元素给temp
arr[i] = arr[min];//小的元素放到下标为i这里
arr[min] = temp;//最小的元素已经放到前面,默认当前的元素为最小
}
}
//遍历数组
for (int z = 0;z<arr.length;z++){
System.out.print(arr[z]);
}
}