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

自己初学Java给自己设计的排序算法遇到的一些问题

2014-05-06 11:30 218 查看
今天自己给自己出了点题目,自己综合着考自己,结果整到最后,找不到原因所在,就是不是自己想要的结果,

最后折腾了很久才找到是一个很小的问题,总算成功搞定。

以下为源码和自己出的题。

/**
* 定义一个数组{23,435,56,5,54,46,6,7,68,7,9,8,323}
* 把它排序并且找到元素46的位置,用折半查找法
* 拓展:想把一个元素48插入这个数组中,并且要求插入之后该数组还是有序的。
* @author 淼淇
*
*/

public class Test10
{

public static void main(String[] args)
{
// TODO Auto-generated method stub
int[] arr = {23,435,56,5,54,46,6,7,68,7,98,323};
bubbleSort(arr);//冒泡法排序
printArray(arr);//打印排序后的数组
int[] arr2 = new int[12];//定义一个新数组
arrayToArray(arr, arr2);//把arr中的元素赋值给arr2
int index = halfSearch(arr2, 46);//折半查找
System.out.println("index="+index);
int index1 = searchIndex(arr2, 48);
System.out.println("index1="+index1);

}
public static void bubbleSort(int[] arr)//冒泡排序
{
for(int x = 0; x < arr.length-1; x++)
{
for(int y = 0; y <arr.length-x-1;y++)
{
if(arr[y] > arr[y+1])
{
int temp = arr[y];
arr[y] = arr[y+1];
arr[y+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.print(arr[x] + "]");
}
System.out.println();
}
public static int halfSearch(int[] arr,int key)//折半查找
{
int min, max, mid;
min = 0;
max = arr.length-1;
mid = (min+max)/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 = (min+max)/2;
}
return mid;
}
public static int searchIndex(int[] arr, int key)//通过折半查找关键字的位置,返回min的角标,即为添加元素的位置(index)
{
int min=0, max=arr.length-1,mid;
while(min<=max)
{
mid = (min+max)>>1;

if(arr[mid] < key)
min=mid+1;
else if(arr[mid] > key)
max=mid-1;
else
return mid;
}
return min;
}

public static void arrayToArray(int[] arr1, int[] arr2)//互换数组元素
{
for(int x = 0; x < arr1.length; x++)
{
arr2[x] = arr1[x];
}
printArray(arr2);
}

}


程序运行结果如下:

[5,6,7,7,23,46,54,56,68,98,323,435]
[5,6,7,7,23,46,54,56,68,98,323,435]
index=5
index1=6


刚开始一直想定义一个动态数组来存放arr,结果貌似要用到集合的相关知识,我那还没有学习,所以只能新创建

了一个数组,两个数组通过for循环把arr赋给arr2,但是输出结果一直不是我想要的,后来分析发现是arr2[x] = arr[]这

个地方写反了,导致都没有赋值成功。后来更改过后,发现还是不输出index=5和index1=6,又经过仔细分析发现是

因为自己定义了返回类型为int ,但在程序中只是单纯的调用了这个函数,却没有定义一个int来接收这个函数的返回

值。导致这个位置无法接收到。最后插入一个元素那个函数,把 return 返回它的min就可以知道插到哪个位置了。

总的来说通过自己这次给自己出题,加深了自己的对算法的一些理解。稍后我会把我自己学过的一些数组的排序

算法再加以总结。相信自己,努力,加油!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: