最常见的一些基本算法,比如折半查找,选择排序,冒泡排序。
折半查找,是它是一种效率较高的查找方法。但是,折半查找要求线性表必须采用顺序存储结构,而且表中元素按关键字有序排列 即数组内元素必须是有序的才可以用折半查找的办法。
//折半查找
public static int halfSearch(int arr[],int key){
int min,mid,max;
min=0;
max=arr.length-1;
while(min<=max)//在min不大于max这个条件下,不断的折半查找
{
mid=(min+max)/2;
if(arr[mid]>key)
max=mid-1;
else if (arr[mid]<key)
min=mid+1;
else
return mid;
}
return -1;
}
选择排序,是一种简单直观的排序算法。它的工作原理是每一次从待排序的数据元素中选出最小(或最大)的一个元素,存放在序列的起始位置,直到全部待排序的数据元素排完。就相当于,军训时候排队,教练从队中选择最小的放在前面,第二小的放在第二位,以此类推。
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[x]>arr[y]){
int temp=arr[x];
arr[x]=arr[y];
arr[y]=temp;
}
}
}
}
冒泡排序,重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。就想一块石头最终会沉下去,而最轻的会冒泡上来,也就是每次排序都会至少确定一个数的位置是最终位置。
public static void BubbleSort(int[] arr){
int flag=0;//设定标志,如果第一次循环比较时没有发生交换,说明数组是升序排序,不用比较排序,提交结束循环。
for (int x=0;x<arr.length-1 ;++x ) {
for (int y=0;y<arr.length-x-1 ;y++ ) {
if(arr[y]>arr[y+1]){
int temp=arr[y];
arr[y]=arr[y+1];
arr[y+1]=temp;
flag=1;
}
}
if (flag==0) {
System.out.println("No Sort");
break;
}
}
}
此外,还有其他的一些排序算法,大家都可以再了解下,像快速排序,希尔排序,归并排序等。每种排序算法都有其优缺点。