您的位置:首页 > 编程语言 > Java开发

java两种排序及二分查找

2013-12-15 18:39 127 查看
class SelectSort
{
public static void main(String[] args)
{
/*
选择排序:元素1和元素2比,把用最大的值继续和第三个数比较。
步骤:
1定义一个数组:int[] arr = {2,4,5,7,1,3,0};//在栈内存创建一个int[]arr数组
再在堆 内存中创建 一块int类型数组区域,把首地址值赋给arr,arr把值根据索引通过地址值一一存储堆中的数组区域
2:遍历数组,通过数组属性length获取到数组中的个数
*/
int[] arr = {2,4,5,7,1,3,0};
System.out.println("遍历:");
ergodic(arr);
selectSort(arr);
System.out.println("选择排序:");
ergodic(arr);
System.out.println("冒泡排序:");
bubble(arr);-
ergodic(arr);
System.out.println("折半查找:");
int value = 114;
int a = geve(value,arr);
/*
if(a==-1){
System.out.println(value+"不存在");
}else{
System.out.println(value+"在索引位置:"+a);
}*/
System.out.println(value+"在索引位置:"+a);
}
//选择排序
public static void selectSort(int[] arr){
//如1,2,32,11,4五个元素,-1:避免索引越界访问到最后一位。因为索引01234如果访问5则不存在。
for(int a = 0; a < arr.length-1; a++){
//b=0+1;b = 1+1; b = 2+1;
for(int b = a+1; b < arr.length; b++){
if(arr[b]<arr[a]){
swap(arr,b,a);
}
}
}
}
//遍历
public static void ergodic(int[] arr){
for(int a = 0; a < arr.length; a++){
if(a!=arr.length-1){
System.out.print(arr[a]+",");
}else{
System.out.println(arr[a]);
}
}
}
//冒泡排序
public static void bubble(int[] arr){
//减少一次判断,避免索引越界。
for(int a = 0; a < arr.length-1; a++){
//-1:避免角标访问到最后一个数(越界)。-a比较完一次就减少一个数(条件表达式)
for(int b = 0; b < arr.length-1-a; b++){
if(arr[b+1]>arr[b]){
swap(arr,b,b+1);
}
}
}
}
//换位功能
public static void swap(int[] arr,int a ,int b){
//采用^换行思想
arr[a] = arr[a]^arr[b];
arr[b] = arr[a]^arr[b];
arr[a] = arr[a]^arr[b];
}
public static int geve(int by ,int[] arr){
int min = 0;
int max = arr.length-1;
int mid = 0;

//有折半可能
while(min<=max){
//求出中间值
mid = (min+max)/2;
//大于,说明就在中间索引  后面,前面不比较
if(by>arr[mid]){
//中间H索引+1赋给 A索引
min = mid+1;
//小于,则在中间索引前边,后面不比较
}else if(by<arr[mid]){
//减掉最后一位数
max = mid-1;
}else{
return mid;
}
}
return -1;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: