import java.util.Arrays;
/** 作者:Darkjazz11
* 日期:2017年11月13日 下午8:37:28
*/
/**
*
*一些常见的算法,包括选择排序法,冒泡排序法,折半查找法,和函数的使用;
*
*/
public class shuzusuanfa {
public static void main(String[] args){
int[] arr={1,3,4,5,6,7,5};
//xuanze(arr);
maopao(arr);
for(int a:arr){
System.out.println(a);
}
int index=zheban(arr,5);
System.out.println(index);
//Arrays.sort(arr); //排序将数组排成升序;
int index1=Arrays.binarySearch(arr,5);//此函数只能在升序时有用;
System.out.println(index1);
int[] newarr = arr.clone(); // 数组的克隆
System.out.println(Arrays.toString(newarr)); //打印数组的函数
int[] newarr1=shanjian(arr,5); //数组元素的提取和删除
System.out.println(Arrays.toString(newarr1));
}
/*
选择排序。
以一个角标的元素和其他元素进行比较。
在内循环第一次结束,最值出现的头角标位置上。
*/
public static void xuanze(int[] a){
int temp=0;
for(int i=0;i<a.length-1;i++){
for(int j=i+1;j<a.length;j++){
if(a[j]>a[i]){
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
}
/*
冒泡排序。
比较方式:相邻两个元素进行比较。如果满足条件就进行位置置换。
原理:内循环结束一次,最值出现在尾角标位置。
*/
public static void maopao(int[] a){
int temp=0;
for(int i=0;i<a.length-1;i++){
for(int j=0;j<a.length-1-i;j++){
if(a[j+1]<a[j]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
}
/*
折半查找
为了提高查找效率,可使用折半查找的方式,注意:这种查找只对有序的数组有效。
这种方式也成为二分查找法。
*/
public static int zheban(int[] arr,int key){
int min,mid,max;
min = 0;
max = arr.length-1;
mid = (max+min)/2;
while(arr[mid]!=key)
{
if(key>arr[mid])
min = mid + 1;
else if(key<arr[mid])
max = mid – 1;
if(min>max)
return -1;
mid = (max+min)/2;
}
return mid;
}
/*
* 数组的增加和减少
*/
public static int[] shanjian(int[] arr,int a){
int count=0,j=0;
for(int i=0;i<arr.length;i++){
if(arr[i]==a){
count++;
}
}
int[] newarr=new int[arr.length-count];
for(int i=0;i<arr.length;i++){
if(arr[i]==a){
}else{
newarr[j]=arr[i];
j++;
}
}
return newarr;
}
}