数组高级(排序和查找)
排序
冒泡排序:
相邻元素两两比较,大的往后放。第一次完毕后,最大值就出现在了最大索引处。同理,继续,即可得到一个拍好序的数组。
public static void main(String[] args){
//定义数组
int[] arr = {24,69,80,57,13};
System.out.pritnln("排序前:");
printArray(arr);
//第一次比较
//arr.length-1是为了防止越界
//arr.length-1-0是为了减少比较的次数
//for(int x = 0 ;x<=arr.length-1-0;x++){
// if(arr[x]>arr[x+1]){
// int temp =arr[x];
// int[x]=arr[x+1];
// arr[x+1]=temp;
// }
//}
System.out.println("第一次比较后");
bubbleSort(arr);
}
//遍历功能
public static void printArray(int[] arr){
System.out.pritnln("[");
for(int x=0;x<arr.length;x++){
if(x==arr.length-1){
System.out.pritnln(arr[x]+"]");
}else{
System.out.print(arr[x]+", ");
}
}
}
public static void bubbleSort(int[] arr){
for(int x =0;x<=arr.length-1;x++){
for(int y =0;y<arr.length-1-x;x++){
for(arr[y]>arr[y+1]){
int temp = arr[y];
arr[y]=arr[y+1];
arr[y]=temp;
}
}
}
}
选择排序:
从0索引开始,依次和后面元素比较,小的往前放,第一次完毕,最小值出现在最小索引处。
public static void selectSort(int[] arr){
for(int x=0;x<arr.length-1;x++){
for(int y=x+1;y<arr.length;y++){
if(arr[y]<arr[x]){
int temp =arr[x];
arr[x]=arr[y];
arr[y]=temp;
}
}
}
}
二分查找
基本查找:数组元素无序(从头找到尾)
二分查找(折半查找):数组元素必须有序
public static int getIndex(int[] arr,int value){
//定义最大索引,最小索引
int max = arr.length-1;
int min=0;
//计算出中间索引
int mid =(max+min)/2;
//拿中间索引的值和要查找的值进行比较
while(arr[mid] != value){
if(arr[mid]>value){
max=mid-1;
}else if(arr[mid]<value){
min = mid + 1;
}
//加入判断
if(min>max){
return -1;
}
mid = (max+min)/2;
}
return mid;
}
注意事项:
无序数组不能进行二分查找,如果先排序后二分查找,已经把元素原始的索引位置改变了。