自己初学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
- 自己初学Java给自己设计的排序算法遇到的一些问题
- 自己遇到的一些问题
- 总结一下自己Java实习后遇到的一些问题。
- 自己遇到的一些问题的总结
- 自己总结遇到的一些问题
- 自己遇到的一些小问题
- cocopod自己使用遇到的一些问题
- 初学Java遇到的一些问题
- 自己写的一些排序算法
- 自己遇到的问题
- JAVA自己面试遇到的问题
- 自己遇到的一些错误
- 自己遇到的一些bug
- 自己遇到的Mysql错误(初学)
- 一些给自己的废话
- 给自己的一些提醒
- 给自己的一些话
- 自己做项目的时候遇到的一些简单问题
- BOOST 在windows的编译及配置(VS2010)
- 港媒:中纪委整肃在港央企 贪污卖国将遭严查
- 从质合到奇偶
- (转)mongodb 解决 couldn't connect to server 127.0.0.1:27017 src/mongo/shell/mongo.js:91 错误
- MySQL之alter语句用法总结
- 自己初学Java给自己设计的排序算法遇到的一些问题
- keepAlive 在xampp中的位置
- 面向对象葵花宝典:思想、技巧与实践(26) - 类模型三板斧
- tomcat服务器启动问题
- 程序内存分配 堆栈
- 关于开源本地化,你有什么建议吗?
- InnoDB: Error: Table "mysql"."innodb_table_stats" not found.
- AE控制图层中要素可见状态的几种方法
- 淡入淡出效果