1:冒泡排序:
public static void main(String[] args){
int[] array={1,3,7,3,8,4,0,4,3,8,5,6};
/**
* 冒泡排序,见名思意就是:每次选择一个数作为目标操作数,和下一个数字比较,选择较大或者较小的往后移位。
* 总共循环次数,为数组长度-1.
* 每次比较的次数,又因为每次都将最小数放到最后,下次则不需要再对上次确定的最小数做比较,所以每次的操作数都会递减。
* 而初次比较的次数为数组元素个数-1
*/
//从大到小排序
for(int i=0;i<array.length-1;i++){ //控制循环次数
//控制每轮循环的比较次数,没循环一次,找到一个参与比较中的最小数,写下次比较次数减少1个
for (int k=0;k<array.length-1-i;k++){
if(array[k]<array[k+1]){ //从大到小排序,其实是找最小数,将最小数往后移位(冒泡)
int temp=array[k+1];
array[k+1]=array[k];
array[k]=temp;
}
}
}
//从小到大排序,只是将最大的后移,只需要将上述方法中的比较符号 '<' 变成 '>' .
for(int i=0;i<array.length-1;i++){ //控制循环次数
//控制每轮循环的比较次数,没循环一次,找到一个参与比较中的最小数,写下次比较次数减少1个
for (int k=0;k<array.length-1-i;k++){
if(array[k]>array[k+1]){ //从大到小排序,其实是找最小数,将最小数往后移位(冒泡)
int temp=array[k+1];
array[k+1]=array[k];
array[k]=temp;
}
}
}
//循环输出数组元素
for(int a:array){
System.out.println(a);
}
}
2:二分法查找
public class BinarySearch {
public static void main(String[] args){
int[] array={1,3,5,6,7,9,11,22,45,66,89,96,132,435,765,800};
int[] array_1={999,888,777,66,56,45,34,23,12,9,6,4,2,0};
int index=getIndex(array,11);
System.out.println("要查找的数字在数组中的索引为:"+index);
int index_1=getIndex(array_1,2);
System.out.println("要查找的数字在数组中的索引为:"+index_1);
}
public static int getIndex(int[] array,int num){
int minIndex=0;
int maxIndex=array.length-1;
int midIndex=(minIndex+maxIndex)/2;
//我们只知道数组是有序的,但并不知道是升序还是降序,首先做判断
if (array[0]>array[array.length-1]){
while(num!=array[midIndex]){
if (array[midIndex]>num){
minIndex=midIndex+1;
}else{
maxIndex=midIndex-1;
}
midIndex=(minIndex+maxIndex)/2;
}
}else{
while(num!=array[midIndex]){
if (array[midIndex]>num){
maxIndex=midIndex-1;
}else{
minIndex=midIndex+1;
}
midIndex=(minIndex+maxIndex)/2;
}
}
return midIndex;
}
}