自己初学Java给自己设计的排序算法遇到的一些问题
2014-05-06 11:30
218 查看
今天自己给自己出了点题目,自己综合着考自己,结果整到最后,找不到原因所在,就是不是自己想要的结果,
最后折腾了很久才找到是一个很小的问题,总算成功搞定。
以下为源码和自己出的题。
程序运行结果如下:
刚开始一直想定义一个动态数组来存放arr,结果貌似要用到集合的相关知识,我那还没有学习,所以只能新创建
了一个数组,两个数组通过for循环把arr赋给arr2,但是输出结果一直不是我想要的,后来分析发现是arr2[x] = arr[]这
个地方写反了,导致都没有赋值成功。后来更改过后,发现还是不输出index=5和index1=6,又经过仔细分析发现是
因为自己定义了返回类型为int ,但在程序中只是单纯的调用了这个函数,却没有定义一个int来接收这个函数的返回
值。导致这个位置无法接收到。最后插入一个元素那个函数,把 return 返回它的min就可以知道插到哪个位置了。
总的来说通过自己这次给自己出题,加深了自己的对算法的一些理解。稍后我会把我自己学过的一些数组的排序
算法再加以总结。相信自己,努力,加油!
最后折腾了很久才找到是一个很小的问题,总算成功搞定。
以下为源码和自己出的题。
/** * 定义一个数组{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就可以知道插到哪个位置了。
总的来说通过自己这次给自己出题,加深了自己的对算法的一些理解。稍后我会把我自己学过的一些数组的排序
算法再加以总结。相信自己,努力,加油!
相关文章推荐
- 初步学习java时遇到的一些问题及对初学朋友们的鼓励
- 初学Java遇到的一些问题
- java界面设计遇到的一些问题,往容器直接添加组建好事getContentPane()
- 总结一下自己Java实习后遇到的一些问题。
- 写java代码遇到的一些问题
- [JAVA加解密]仿照DH算法编写ECDH算法时遇到的一些问题
- linux中初学nodeJs遇到的一些问题
- 初学JavaWeb开发遇到的问题与解决
- Java windows项目迁移到linux上,遇到一些跟路径相关的问题
- 初学数据库遇到的一些问题
- 在CentOS 7上遇到的一些问题,以及自己的解决方法
- 初学软件开发可能会遇到了一些问题...
- 最近项目中遇到的一些设计问题
- 自己遇到的有关Genymotion使用中遇到的一些问题及解决方式
- 关于初学JAVA里的一些问题!
- java学习会遇到的一些问题!
- java在实际过程中遇到的一些小问题( 不断更新)
- java初学的一些小问题
- Java中关于空格遇到的一些问题
- 重装系统后使用java遇到的一些小问题