import java.util.*;
public class ArrayDemo_2 {
public static void main(String[] args)
{
int[] arr = { 16,96,56,76 };
//使用sort方法
/* Arrays.sort(arr);
PrintArray(arr);//在实际开发中使用该方法
//选择排序测试
PrintArray(arr);
SortSelect(arr);
PrintArray(arr);
//冒泡排序测试
int[] arr1 = { 16,96,56,76 };
PrintArray(arr1);
BubbleSort(arr1);
PrintArray(arr1);
*/
//查找排序
/*int[] array = {2,8,6,3,9,4};
BubbleSort(array);
PrintArray(array);
int index = getIndex(array,8);
System.out.println("index="+index);
int index1 = halfSearch_1(array,6);
System.out.println("index1="+index1);
*/
//向数组中插入数据
int[] arr_2=new int[5];
arr_2[0]=0;
arr_2[1]=1;
arr_2[2]=2;
arr_2[3]=4;
InsertNum(arr_2,8);
PrintArray(arr_2);
}
//查找数组中的数
public static int getIndex(int[] arr,int key)
{
for(int x=0;x<arr.length;x++)
{
if(arr[x]==key)
return x;
}
return -1;
}
//向有序数组中插入一个数
public static void InsertNum(int[] arr,int key)
{
int min=0,max=arr.length-1,mid;
while(min<max)
{
mid=(max+min)>>1;
if(key>arr[mid])
min = mid + 1;
else if(key<arr[mid])
max = mid - 1;
else
break;
}
for(int Index=arr.length-1;Index>min;Index--)
{
arr[Index]=arr[Index-1];
}
arr[min]=key;
}
//折半查找,先排序在查找
public static int halfSearch(int[] arr,int key)
{
int min,max,mid;
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 halfSearch_1(int[] arr,int key)
{
int min=0,max=arr.length-1,mid;
while(min<=max)
{
mid=(max+min)>>1;
if(key>arr[mid])
min = mid + 1;
else if(key<arr[mid])
max = mid - 1;
else
return mid;
}
return -1;
}
//选择排序,降序排列
/*选择排序
* 内循环结束一次,最值出现在头角标位置上
*
* */
public static void SortSelect(int[] arr)
{
for(int i=0;i<arr.length-1;i++)
{
for(int x=i+1;x<arr.length;x++)
{
if(arr[i]<arr[x])
{
arr[x]=arr[i]^arr[x];
arr[i]=arr[i]^arr[x];
arr[x]=arr[i]^arr[x];
}
}
}
}
//冒泡排序
/*第一圈:最值出现在最后位*/
public static void BubbleSort(int[] arr)
{
for(int i=0;i<arr.length-1;i++)
{
for(int x=0;x<arr.length-i-1;x++)
{
if(arr[x]>arr[x+1])
{
int temp = arr[x];
arr[x]=arr[x+1];
arr[x+1]=temp;
}
}
}
}
//打印输出数组元素
public static void PrintArray(int[] arr)
{
System.out.print("[");
for(int x=0;x<arr.length;x++)
{
if(x != arr.length-1)
System.out.print(arr[x]+", ");
else
System.out.println(arr[x]+"]");
}
}
}
public class ArrayDemo_2 {
public static void main(String[] args)
{
int[] arr = { 16,96,56,76 };
//使用sort方法
/* Arrays.sort(arr);
PrintArray(arr);//在实际开发中使用该方法
//选择排序测试
PrintArray(arr);
SortSelect(arr);
PrintArray(arr);
//冒泡排序测试
int[] arr1 = { 16,96,56,76 };
PrintArray(arr1);
BubbleSort(arr1);
PrintArray(arr1);
*/
//查找排序
/*int[] array = {2,8,6,3,9,4};
BubbleSort(array);
PrintArray(array);
int index = getIndex(array,8);
System.out.println("index="+index);
int index1 = halfSearch_1(array,6);
System.out.println("index1="+index1);
*/
//向数组中插入数据
int[] arr_2=new int[5];
arr_2[0]=0;
arr_2[1]=1;
arr_2[2]=2;
arr_2[3]=4;
InsertNum(arr_2,8);
PrintArray(arr_2);
}
//查找数组中的数
public static int getIndex(int[] arr,int key)
{
for(int x=0;x<arr.length;x++)
{
if(arr[x]==key)
return x;
}
return -1;
}
//向有序数组中插入一个数
public static void InsertNum(int[] arr,int key)
{
int min=0,max=arr.length-1,mid;
while(min<max)
{
mid=(max+min)>>1;
if(key>arr[mid])
min = mid + 1;
else if(key<arr[mid])
max = mid - 1;
else
break;
}
for(int Index=arr.length-1;Index>min;Index--)
{
arr[Index]=arr[Index-1];
}
arr[min]=key;
}
//折半查找,先排序在查找
public static int halfSearch(int[] arr,int key)
{
int min,max,mid;
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 halfSearch_1(int[] arr,int key)
{
int min=0,max=arr.length-1,mid;
while(min<=max)
{
mid=(max+min)>>1;
if(key>arr[mid])
min = mid + 1;
else if(key<arr[mid])
max = mid - 1;
else
return mid;
}
return -1;
}
//选择排序,降序排列
/*选择排序
* 内循环结束一次,最值出现在头角标位置上
*
* */
public static void SortSelect(int[] arr)
{
for(int i=0;i<arr.length-1;i++)
{
for(int x=i+1;x<arr.length;x++)
{
if(arr[i]<arr[x])
{
arr[x]=arr[i]^arr[x];
arr[i]=arr[i]^arr[x];
arr[x]=arr[i]^arr[x];
}
}
}
}
//冒泡排序
/*第一圈:最值出现在最后位*/
public static void BubbleSort(int[] arr)
{
for(int i=0;i<arr.length-1;i++)
{
for(int x=0;x<arr.length-i-1;x++)
{
if(arr[x]>arr[x+1])
{
int temp = arr[x];
arr[x]=arr[x+1];
arr[x+1]=temp;
}
}
}
}
//打印输出数组元素
public static void PrintArray(int[] arr)
{
System.out.print("[");
for(int x=0;x<arr.length;x++)
{
if(x != arr.length-1)
System.out.print(arr[x]+", ");
else
System.out.println(arr[x]+"]");
}
}
}