1. 数组的查找
1)线性查找法:将要查找的关键字Key与数组中的元素逐个进行比较。这个过程持续到在列表中找到与关键字匹配的元素,或者查完列表也没有找到关键字为止。如果匹配成功,线性查找法返回与关键字匹配的元素的下标。如果未匹配,则返回-1。
public class LinearSearch{
public static int linearSearch(lin [ ] list, int key){
for(int i = 0;i < list.length; i++){
if(key = list[ i ])
return i;
}
return -1;
}
}
注:数组中的元素可以任意排序
2) 二分查找法:首先将关键字与数组的中间元素进行对比:
如果关键字小于中间元素,只需要在数组的前一般元素中继续查找关键字。
如果关键字和中间元素相等,则匹配成功,查找结束。
如果关键字大于中间元素,只需要在数组的后一般元素中继续查找关键字。
public static int binarySearch(int[ ] list, int key){
int low = 0;
int high = list.length - 1;
while(high > low){
if(key < list[ mid ])
high = mid - 1;
else if(key > list[ mid ])
low = mid + 1;
else
return mid;
}
return -1;
}
2. 数组的排序
选择排序:先找到数列中最小的数,然后将它放在数列的最前面,接下来,在剩下的数中找到最小数,将它放到第一个数的后面,以此类推。
public class SelectionSort {
public static void selectionSort(double[ ] list){
for(int i = 0;i < list.length;i++){
double currentMin = list[i];
int currentMinIndex = i;
for(int j = i + 1;j < list.length;j++){
if(currentMin > list[j]){
currentMin = list[j];
currentMinIndex = j;
}
}
if(currentMinIndex != i){
list[currentMinIndex] = list[i];
list[i] = currentMin;
}
}
}
}
插入排序:在已排好序的字数列中反复插入一个新元素对数列值进行排序的,直到整个数列全部排好序
public class InsertionSort {
public static void insertionSort(double[ ] list){
for(int i = 1;i < list.length;i++){
double currentElement = list[i];
int k;
for(k = i - 1;k > 0 && list[k] > currentElement;k--){
list[k + 1] = list[k];
}
list[k + 1] = currentElement;
}
}
}