数组排序(冒泡排序)
基本思想:
以升序数组为例,每次将两个相邻的元素进行比较,将小的元素调到前面,反复进行比较,直至最后的元素。第一次找出最大的元素,第二次找出第二大的元素…最后一次找出最小的元素。
import java.util.Arrays;
public class Test {
public static void main(String[] args) {
int[] arr={1,9,2,8,3,7,4,6,5};
System.out.println(Arrays.toString(bubbleSort(arr)));
}
public static int[] bubbleSort(int[] a){
for(int i=0;i<a.length;i++){
for(int j=0;j<a.length-1-i;j++){
if(a[j]>a[j+1]){
int temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
return a;
}
}
查找数组中指定元素(二分查找)
要求:
数组为有序数组。
基本思想:
假设数据是按升序排列,对于要查找的值X,从中间位置开始比较。
(1)若X等于中间值,则查找成功;
(2)若X小于中间值,则在数组前半部分查找;
(3)若X大于中间值,则在数组后半部分查找,直到找到或无相应的值为止。
public class Test {
public static void main(String[] args) {
int[] arr={1,2,3,4,5,6,7,8,9};
int ret=binarySearch(arr,8);
System.out.println(ret);
}
public static int binarySearch(int[] a,int k){
int left=0;
int right=a.length-1;
while(left<=right){
int mid=(left+right)>>1;
if(k<a[mid]){
right=a[mid]-1;
}
else if(k>a[mid]){
left=a[mid]+1;
}
else{
return mid;
}
}
return -1;
}
}
查找数组中指定元素(顺序查找)
问题描述:在数组中查找指定元素,若找到指定元素,则返回下标值,否则返回-1。
public class Test {
public static void main(String[] args) {
int[] arr={1,9,2,8,3,7,4,6,5};
System.out.println(find(arr,6));
}
public static int find(int[] a,int k){
for(int i=0;i<a.length;i++){
if(a[i]==k){
return i;
}
}
return -1;
}
}
检查数组的有序性
问题描述:给定一个整型数组, 判断该数组是否是有序的。
public class Test {
public static void main(String[] args) {
int[] arr={1,2,3,4,5,6,7,8,9};
System.out.println(isSorted(arr));
}
public static boolean isSorted(int[] a){
for(int i=0;i<a.length-1;i++){
if(a[i]>a[i+1]){
return false;
}
}
return true;
}
}