冒泡排序、选择排序、直接插入排序(java实现)
2016-10-08 23:01
525 查看
冒泡排序是一种交换排序,它的基本思想是:两两比较相邻记录的关键字,如果反序就交换,直到没有反序的记录为止。我的理解就是,从底部开始将最小的慢慢的推到第一个这样重复:
选择排序,我的理解就是先循环一遍,把最小元素找出到,记录其下标,和第一个元素交换,然后从第二个元素开始循环,找出最小,交换,这样直到最后一个元素
这个名字不太直接常常忘记其内容,选择排序,选择啥呢?咋选择呢?今天起床之后迟迟没有想起来估计也是不太熟练导致的,选择排序就是选择最小的,然后和第一个元素去交换,这样就不用去管第一个元素了,因为它总是最小的,所以从第二个数再去寻找最小的,找到之后在和第二个数去交换,这样前两个数就是最小的。所以选择排序总是保证了前面的顺序已经排好了。
直接插入排序:将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。
上面的定义我一开始也没有弄懂,其实这个过程就像我们打扑克的时候,当随手拿起一副牌的时候,比如大小是5,3,6,4,我们总是下意识的将3换到5的前面变成3,5,6,4,然后把4放入3和5之间,这样就变成了3,4,5,6。直接插入排序基本上是模拟了这一行为。
暂时就这样,欢迎指正。
import java.util.*; public class BubbleSort{ public int[] bubbleSort(int[] a){ int tmp; boolean flag = true; for(int i = 0; i < a.length - 1 && flag; i++){ flag = false; for(int j = a.length - 1; j > i; j--){ if (a[j-1] > a[j]) { tmp = a[j-1]; a[j-1]=a[j]; a[j]=tmp; flag = true; } } } return a; } public static void main(String[] args){ BubbleSort b = new BubbleSort(); int[] a = new int[]{2,3,8,6,7,1,4,9,5}; System.out.println(Arrays.toString(b.bubbleSort(a))); } }
选择排序,我的理解就是先循环一遍,把最小元素找出到,记录其下标,和第一个元素交换,然后从第二个元素开始循环,找出最小,交换,这样直到最后一个元素
这个名字不太直接常常忘记其内容,选择排序,选择啥呢?咋选择呢?今天起床之后迟迟没有想起来估计也是不太熟练导致的,选择排序就是选择最小的,然后和第一个元素去交换,这样就不用去管第一个元素了,因为它总是最小的,所以从第二个数再去寻找最小的,找到之后在和第二个数去交换,这样前两个数就是最小的。所以选择排序总是保证了前面的顺序已经排好了。
import java.util.*; public class SelectSort{ public int[] selectSort(int[] a){ int tmp; int min; for(int i = 0; i < a.length -1; i++){ min = i; for(int j = i + 1; j < a.length; j++){ if(a[min] > a[j]){ min = j; } } if(i != min){ tmp = a[i]; a[i] = a[min]; a[min] = tmp; } } return a; } public static void main(String[] args){ SelectSort s = new SelectSort(); int[] a = new int[]{2,3,8,6,7,1,4,9,5,10,0,5,1}; System.out.println(Arrays.toString(s.selectSort(a))); } }
直接插入排序:将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录数增1的有序表。
上面的定义我一开始也没有弄懂,其实这个过程就像我们打扑克的时候,当随手拿起一副牌的时候,比如大小是5,3,6,4,我们总是下意识的将3换到5的前面变成3,5,6,4,然后把4放入3和5之间,这样就变成了3,4,5,6。直接插入排序基本上是模拟了这一行为。
public class InsertSort{ public void insertSort(int[] a){ int tmp = 0; for(int i = 1; i < a.length; i++){ int j = i-1; //tmp保存了当前的序号为i的值 tmp = a[i]; for(;j >= 0 && tmp < a[j]; j--){ a[j+1]=a[j]; //后移数据 } //到这的时候我一开始不能理解,j+1不是赋值了两次么?,后来注意到j--,如果上面的循环执行了,出来的时候其实是j--的值. a[j+1]=tmp; } } }
暂时就这样,欢迎指正。
相关文章推荐
- java实现各种基础排序(冒泡排序、快速排序、直接选择排序、堆排序、直接插入排序、归并排序)
- java中各种常用排序实现(直接插入排序、直接选择排序、堆排序、冒泡排序、快速排序和归并排序)
- 排序算法之冒泡排序、选择排序、直接插入排序(java实现)
- 冒泡排序-直接选择排序-直接插入排序-希尔排序-java实现
- java版排序算法简介及冒泡排序以及优化,选择排序,直接插入排序,希尔排序,堆排序,快速排序及其优化前言 2 分类 2 稳定性 3 时间复杂度 4 Java实现版本 5 1、冒泡排序 6 2、选择排序
- 冒泡排序、直接插入排序及选择排序之Java实现
- java实现三种简单排序以及改良:冒泡排序,选择排序,直接插入排序
- java实现冒泡排序,选择排序,直接插入排序,快速排序
- 牛客网Java刷题知识点之插入排序(直接插入排序和希尔排序)、选择排序(直接选择排序和堆排序)、冒泡排序、快速排序、归并排序和基数排序(博主推荐)
- Java实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等
- 编程实现直接插入排序、希尔排序、冒泡排序、快速排序、选择排序
- Java选择排序、冒泡排序、直接插入排序与二分查找
- java几种排序简单实现(快速排序,冒泡排序,直接插入排序)
- Java 选择排序、冒泡排序、快速排序、直接插入排序、Java自带的排序等方法的使用和总结
- 快速排序,选择排序,直接插入,冒泡排序的javascript实现
- #.java实现排序算法:插入排序、选择排序、冒泡排序
- 十二.C语言8种排序算法及其实现 1.希尔排序 2.二分插入法 3.直接插入法 4.带哨兵的直接排序法 5.冒泡排序 6.选择排序 7.快速排序 8.堆排序
- 我在北京找工作(二):java实现算法<1> 冒泡排序+直接选择排序
- 我在北京找工作(二):java实现算法<1> 冒泡排序+直接选择排序
- Java程序实现冒泡排序、直接排序、插入排序方法