//交换数组中的两个数
public static void Swap(int i,int j,int arr[])
{
if(i>=0&&i<=arr.length-1&&j>=0&&j<=arr.length-1)//确保两个数存在
{
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
//冒泡排序法
public static void MaoPaoSort(int arr[])
{
//冒泡排序,外层循环决定走几趟,n个数需要n-1趟10个数,则需9趟,1个数,则需0趟
int temp;
for(int i=0;i<arr.length-1;i++)
{
for(int j=0;j<arr.length-1-i;j++)
{
if(arr[j]>arr[j+1])//交换位置,小的在前面
{
temp=arr[j];
arr[j]=arr[j+1];
arr[j+1]=temp;
}
}
}
}
//选择排序法
public static void SeclectSort(int arr[])
{
int min=0;
int flag=0;
for(int i=0;i<arr.length-1;i++)
{
min=arr[i];//假设第i个数暂时为最小的
flag=i;//记录位置
//寻找在第i个后面的数中比它小的数字
for(int j=i+1;j<arr.length;j++)
{
if(min>arr[j])
{
min=arr[j];
flag=j;
}
}
//接下来交换第i个和和其后面最小的数字,使得数组中第i个数是最小的
min=arr[i];
arr[i]=arr[flag];
arr[flag]=min;
}
}
//插入排序法
public static void InsertSort(int arr[])
{
for(int i=1;i<arr.length;i++)
{
int insertVal=arr[i];//要插入的数
int index=i-1;//index记录要插入的位置
//寻找插入的位置
while(index>=0&&insertVal<arr[index])//
{
arr[index+1]=arr[index];
index--;
}
arr[index+1]=insertVal;
}
}
//快速排序法
public static void QuickSort(int left,int right,int arr[])
{
if(left<right)
{
int i=left-1;
int j=right+1;
int mid=arr[(left+right)/2];
while(true)
{
while(arr[++i]<mid);
while(arr[--j]>mid);
if(i>=j)
{break;}
Swap(i,j,arr);
}
QuickSort(left,--i,arr);
QuickSort(++j,right,arr);
}
}
//二分查找
public static int TwoFind(int leftIndex,int rightIndex,int tarVal,int arr[])
{
if(leftIndex>=0&&leftIndex<arr.length&&rightIndex>=0
&&rightIndex<arr.length&&leftIndex<=rightIndex)
{
int midIndex=(leftIndex+rightIndex);
int mid=arr[midIndex];
if(mid>tarVal)
return TwoFind(leftIndex,midIndex-1,tarVal,arr);
else if(mid<tarVal)
return TwoFind(midIndex+1,rightIndex,tarVal,arr);
else
return midIndex;
}
else
return -1;
}