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

来源:互联网 发布:多线程java 测试代码 编辑:程序博客网 时间:2024/06/05 02:51

       今天自己给自己出了点题目,自己综合着考自己,结果整到最后,找不到原因所在,就是不是自己想要的结果,

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

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


/** * 定义一个数组{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 stubint[] 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中的元素赋值给arr2int 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] + ",");elseSystem.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;elsereturn 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=5index1=6


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

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

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

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

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



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

算法再加以总结。相信自己,努力,加油!


0 0