/** 作者: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;
}
}