Java排序[理解]+优化冒泡+二分查找
来源:互联网 发布:白鹿原小说败笔 知乎 编辑:程序博客网 时间:2024/06/04 18:27
/** * 这个优化版冒泡版:当数组已经为有序数组时,会跳出循环。 * 即类似[1,2,3,9,4,5]的数组时,会减少复杂度 * @author yangm * */// 冒泡排序:class BubbleSort { public static void sort(int arr[]) { System.out.println("优化冒泡排序:"); int len = arr.length - 1, count = 0; for (int i = 0; i < len; i++) { // 由数组长度控制总次数 // 假设数组已经是有序数组了。如果发生交换表示假设为false,否则为true boolean sorted = true; for (int j = 0; j < len -i; j++) { count++; if (arr[j] > arr[j + 1]) { // 不能用j++,会改变J的值。 int temp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = temp; sorted = false; } } if (sorted) { break; } // 表示已经为有序数组! } // end out-for System.out.println("count:" + count); ClassicSortDriver.showArr(arr); }// end method}// end class
/** * 选择排序自己理解: * -从乱序数组里面选择一个数与未排序数组里面每个元素比较大小,记住最小元素的下标 * 内层循环结束,交换未排序数组第一个元素与最小元素。 * 外层循环从第二个元素继续,得到第二个最小元素放在排序数组的后面,即与未排序数组第一个元素交换 * @author yangm * */class SelectSort{ public static void sort(int arr[]) { System.out.println("选择排序:"); int len = arr.length-1, count = 0; for(int i = 0; i<len; i++) { int min_index = i; for(int j = len; j>i; j--) { count ++; if(arr[j]<arr[min_index]) { min_index = j; } } int temp = arr[i]; arr[i] = arr[min_index]; arr[min_index] = temp; } System.out.println("count:" + count); }//end method}//end class
个人感觉以上者两个排序方法是逻辑上最容易的理解的两个排序了。没毛病~
【后面理解逻辑了再写。这个东西和钱一样应该是多多益善!吧!】
/** * 插入排序: 第一个与第二相比,小的放前面。 * 第二个与第三相比,小的放前面。新的第二个与第一个相比,小的放前面。 * 第三个与第四个相比,小的放前面。新的第三个与第二个相比,小的放前面。如果位置正确。后面不用执行。否则同上 。。。。。 */class insertSort { public static void sort(int arr[]) { System.out.println("插入排序:"); int count = 0; for(int i = 1; i < arr.length; i++) {//由数组长度控制外循环次数 for(int j = i; j > 0;j--) { count++; if(arr[j]<arr[j-1]) { int temp = arr[j]; arr[j] = arr[j-1]; arr[j-1] = temp; }else break; }//end inner for } System.out.println("count:" + count); ClassicSortDriver.showArr(arr); }//end method}
二分查找。
/** * 二分法查找,理解了还是很好写的。 * @author yangm * */public static int binarySearch(int arr[], int key){ int top = 0, bottom = arr.length - 1; while (top<=bottom){ int mid = (top + bottom) / 2; //折半 if(arr[mid] < key) { top = mid + 1; }else if(arr[mid] > key){ bottom = mid - 1; }else return mid; } return -1;//不存在返回-1}
递归方法:
/** * 二分法查找,递归方法: * @author yangm */public static int binarySearch(int arr[], int top, int bottom, int key){ while (top<=bottom){ int mid = (top + bottom) / 2; //折半 if(arr[mid] < key) { return binarySeach(arr,mid+1,bottom,key); }else if(arr[mid] > key){ return binarySeach(arr,top,mid-1,key); }else return mid; } return -1;//不存在返回-1}
阅读全文
1 0
- Java排序[理解]+优化冒泡+二分查找
- java 冒泡排序二分查找
- Java 冒泡排序,选择排序,二分查找
- JAVA冒泡排序,归并排序,二分查找
- JAVA实现冒泡排序和二分查找
- JAVA实现冒泡排序和二分查找
- Java--冒泡、选择排序,二分查找
- Java中冒泡排序和二分查找
- Java-冒泡,选择排序,二分查找算法
- 冒泡排序+二分查找
- 冒泡排序、二分查找
- 简单Java冒泡排序 二分查找 快速排序
- java实现的选择排序、冒泡排序、二分查找
- java的 最大值 选择排序 冒泡排序 二分查找
- 冒泡排序和二分查找
- 二分查找与冒泡排序
- 冒泡排序和二分查找
- 冒泡排序和二分查找
- android开发:安装搭建android开发环境
- CSU
- 02、Tensroflow简单例子
- 求两个数中的最大值最小值算法
- MySQl数据库-批量添加数据的两种方法
- Java排序[理解]+优化冒泡+二分查找
- 我的XML初学笔记
- Java版飞机订票系统
- ShowModal和Show的区别
- [PHP] 网页验证码的实现
- 设置文本与图片的对其方式,元素的隐藏
- 递归及尾递归优化
- MySql基于GTID主从复制的搭建
- mysql 单表索引优化案例