Java选择排序、冒泡排序、直接插入排序与二分查找
来源:互联网 发布:五星宏辉软件 编辑:程序博客网 时间:2024/05/22 21:02
介绍一下四种Java的经典算法,这四种算法是非常基础的算法,学算法对我们深入理解程序有很大帮助。
- 选择排序
- 冒泡排序
- 插入排序
- 二分查找
选择排序
初始时第一个元素依次和后面的元素比较,在序列中找到最小元素并记录其下标,第一轮比较完毕后把最小元素交换到序列的起始位置作为已排序序列,然后再从剩下的未排序元素中找到最小元素,放到已排序序列末尾,直到所有元素排列完毕。
示例代码:
public void selectSort(int[] array) { for (int i = 0; i < array.length - 1; i++) {//第i个元素 int num = array[i]; int index = i; for (int j = i + 1; j < array.length; j++) {//第i+1个元素 if (array[j] < num) {//比较 num = array[j]; index = j; //选出最小的值记录下标 } } array[index]=array[i];//交换位置 array[i]=num; } }
冒泡排序
重复的访问要排序的元素,依次比较相邻的两个元素,如果需要交换就交换他们的位置,直到没有元素再需要交换,每一轮交换之后都会有一个最值冒泡出来,所以此方法形象的称为冒泡排序。
示例代码:
public void bubbleSort(int[] array){ int temp; for(int i = 0; i < array.length - 1; i++){//外层循环控制轮数 for(int j = 0; j < array.length - 1 - i; j++){//内层循环控制次数 if(array[j] > array[j + 1]){ //比较相邻元素,如果需要就两两交换 temp = array[j]; array[j] = array[j + 1]; array[j + 1] = temp; } } } }
直接插入排序
从第二个元素开始,把待排序的元素和此元素之前的元素从后向前依次比较,将大于此元素的逐个后移一位,找到合适位置并插入进去,直到所有的元素插入完毕为止,得到一个新的有序序列。
示例代码:
public void insertSort(int[] array){ int insertNum; //要插入的数 for(int i = 1; i < array.length; i++){ //从数组第2个元素开始遍历 insertNum = array[i]; int j = i - 1; //已经排序好的序列元素个数 while(j >= 0 && array[j] > insertNum){ //序列从后到前循环,将大于insertNum的数向后移动一格 array[j + 1] = array[j]; //array[j]的值后移 j--; //j前移 } array[j + 1] = insertNum; //将需要插入的数放在要插入的位置。 } }
二分查找
二分查找又称折半查找,查找一个有序数组中的元素。首先,假设数组元素是按升序排列,将数组中间位置记录的关键字与查找关键字比较,如果两者相等,则查找成功;否则利用中间位置记录将数组分成前、后两个子表,如果中间位置记录的关键字大于查找关键字,则进一步查找前一子表,否则进一步查找后一子表。重复以上过程,直到找到满足条件的记录,使查找成功,或直到子表不存在为止,此时查找不成功。
示例代码:
int binarySearches(int[] array, int key) { int startIndex = 0; //开始查找的下标位置0 int endIndex = array.length - 1; //结束查找的下标位置为数组的最后一个元素 while (startIndex <= endIndex) { int midIndex = (startIndex + endIndex) / 2; if (array[midIndex] < key){ startIndex = midIndex + 1; }else if (array[midIndex] > key){ endIndex = midIndex - 1; }else{ return midIndex; // 找到了,返回元素下标 } } return -(startIndex + 1); // 没有找到,返回开始下标加1的负值 }
阅读全文
0 0
- 冒泡排序,选择排序,直接插入排序,二分查找排序
- Java选择排序、冒泡排序、直接插入排序与二分查找
- 直接插入排序、二分插入排序、希尔排序、冒泡排序与简单选择排序
- java的冒泡排序、选择排序与插入排序与二分查找
- Java 冒泡排序,选择排序,二分查找
- c语言归并、选择、直接插入、冒泡、快速、堆排序与顺序、二分查找
- 经典算法:二分查找、插入排序、选择排序、冒泡排序
- 经典算法:二分查找、插入排序、选择排序、冒泡排序
- 经典算法:二分查找、插入排序、选择排序、冒泡排序
- 插入,冒泡,选择,快速排序,二分查找
- 排序----冒泡,选择,插入,二分查找
- 插入,冒泡,选择,快速排序,二分查找(Java版)
- 插入,冒泡,选择,快速排序,二分查找(Java版)
- Java冒泡,快速,插入,选择排序^_^+二分算法查找
- 直接插入排序,选择排序,冒泡排序
- 选择排序、冒泡排序、直接插入排序
- 冒泡排序、选择排序、直接插入排序(java实现)
- Java数据结构算法之选择排序、插入排序、冒泡排序、二分查找
- Qt配置pro文件
- MySQL 教程「事务(下)」
- HTML 相对定位和绝对定位 放置位置
- linux下GNU、G++编辑器的安装及基本使用
- flask-cache 缓存Jinja2模板之源码解读
- Java选择排序、冒泡排序、直接插入排序与二分查找
- 【java】-- 调戏Integer 包装与解包装
- 条款3:使容器里对象的拷贝操作轻量而正确
- umask使用方法
- jQuery第六章插件
- python学习总结---while循环
- Bailian3179 最长单词【字符串】
- js函数重载
- 外排序-置换选择排序,赢者树,败者树