Java选择排序、冒泡排序、直接插入排序与二分查找
2017-12-02 12:06
411 查看
介绍一下四种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的负值 }
相关文章推荐
- 排序算法之冒泡排序、选择排序、直接插入排序(java实现)
- C语言实现直接插入排序,冒泡排序以及二分查找(巩固理解记忆)
- 冒泡排序-直接选择排序-直接插入排序-希尔排序-java实现
- 插入,冒泡,选择,快速排序,二分查找(Java版)
- 冒泡排序、直接插入排序及选择排序之Java实现
- 牛客网Java刷题知识点之插入排序(直接插入排序和希尔排序)、选择排序(直接选择排序和堆排序)、冒泡排序、快速排序、归并排序和基数排序(博主推荐)
- 常见排序集合(冒泡排序,选择排序,直接插入排序,二分插入排序,快速排序,希尔排序,归并排序)
- 冒泡排序,简单插入排序,快速排序,二分查找的JAVA实现
- 经典算法:二分查找、插入排序、选择排序、冒泡排序
- 冒泡排序,选择排序,直接插入排序,二分查找排序
- 经典算法:二分查找、插入排序、选择排序、冒泡排序
- Java 选择排序、冒泡排序、快速排序、直接插入排序、Java自带的排序等方法的使用和总结
- C语言实现直接插入排序,冒泡排序以及二分查找(巩固理解记忆)
- java实现冒泡排序,选择排序,直接插入排序,快速排序
- java实现的选择排序、冒泡排序、二分查找
- Java数组遍历、求最大值、选择排序、冒泡排序、二分查找
- Java 冒泡排序,选择排序,二分查找
- java实现各种基础排序(冒泡排序、快速排序、直接选择排序、堆排序、直接插入排序、归并排序)
- 经典算法:二分查找、插入排序、选择排序、冒泡排序
- 插入,冒泡,选择,快速排序,二分查找(Java版)