希尔排序
思路:希尔排序就是分组,分组选择增量,然后一组组排序插入,增量有规律变化。代码如下,下列是用希尔排序然后再进行二分查找的代码。
public class Main{
public static void main(String[] args) {
int arr[]= {1,2,3,6,7,5,4,8,9}; //创建数组,
shellSort(arr);
int key=4;
int b=binarys(arr,0,arr.length-1,key); //函数对应的参数分别书,数组名,查找初始位置,查找末端位置,被查找的数
if(b==-1)
System.out.println("在该数组中无法查到目标数");
else
System.out.println("所求的目标数在数组的第"+(b+1)+"个");
}
static void shellSort(int[] arr)
{
for(int interval=arr.length/2;interval>0;interval/=2)
//确定增量的for
{
for(int i=interval;i<arr.length;i++)
//确定首先选的数
{
int target=arr[i];//后一个数
int j=i-interval; //i前面的那个数
while(j>-1&&target<arr[j])
{
arr[j+interval]=arr[j];
j-=interval;
}
arr[j+interval]=target;
}
}
}
static int binarys(int[] arr,int low,int high,int key) //递归思想
{
if(low>high)
return -1;
int mid=low+((high-low)>>1); //求中间数的数组下标
int midVal=arr[mid];
if(key>midVal)
return binarys(arr,mid+1,high,key); //倘若目标数大于中间数,那么将初始位置改为中间下标+1,查找范围为原来的一半
else if(key<midVal)
return binarys(arr,low,mid-1,key); //倘若目标数大于中间数,那么将初始位置改为中间下标+1,查找范围为原来的一半
else
return mid;
}
}
若有错误,还请指正