排序算法之简单算法——java实现
来源:互联网 发布:手机vr眼睛 软件 编辑:程序博客网 时间:2024/06/01 09:25
排序算法之简单算法
排序算法中的简单算法共有3种:冒泡排序,简单选择排序,直接插入排序。
1.冒泡排序
冒泡排序是通过从数组最后往前进行比较,把较小的数交换到前面,较大的数交换到后面的一种交换排序算法。
其java代码如下:
//冒泡排序,小的数一个个冒上来 public void bubbleSort(int[] a) { int i,j; boolean flag=true;//若已冒泡完成,则退出for循环 for (i = 0; i < a.length&&flag; i++) { flag=false; for (j = a.length-1; j>i; j--) {//从后往前循环,把小的数冒到前面,大的数到后面 if (a[j-1]>a[j]) { swap(a, j-1, j); flag=true; } } } }
在上面的代码中,加入了一个flag标志,用来判断是否已经有序了,可以减少一些不必要的循环。
冒泡排序的时间复杂度为O(n^2),空间复杂度为O(1),并且冒泡排序是一种稳定的排序。
2.简单选择排序
简单选择排序是从数组中选出第1小的元素放入a[0],第2小的元素放入a[1],第n小的元素放入a[n-1]位置的一种选择排序算法。
其java代码如下:
//简单选择排序,选出第1小放到第1个位置,第2小到第2个位置,第n小到第n个位置 public void simpleSelectSort(int[] a) { int i,j,min; for(i=0;i<a.length;i++) { min=i;//第n小 for ( j= i+1;j < a.length; j++) {//找到i+1...length的最小的值的位置 if (a[j]<a[min]) { min=j; } } if (min!=i) {//最小值不是初始位置,则交换 swap(a, min, i); } } }
简单选择排序算法的时间复杂度为O(n^2),空间复杂度为O(1),且是一种稳定的排序算法。
3.直接插入排序
直接插入排序的基本思想是:将a[1]插入a[0]的相应位置,以组成一个有序列表a[0…1],将a[2]插入有序列表a[0…1]的相应位置,以组成一个有序列表a[0…2],将a[n]插入有序列表a[0…n-1]的相应位置,以组成一个有序的a[0…n]。
直接插入排序是一种插入排序类算法,其java代码如下:
//直接插入排序,将待排序元素插入已排好序的序列中 public void insertSort(int[] a) { int i,j,m; for (i = 1; i < a.length; i++) {//从第二个位置开始,依次将该元素插入前面的排好序的序列中 if (a[i]<a[i-1]) {//待排序元素比序列中最小的元素小,则进行插入 m=a[i];//标记待排序元素的值 for (j = i-1;j>=0&&a[j]>m;j--) { //从排好序的序列中依次向前比较,直到m>a[j]标记元素大于排序元素,或m小于排序元素中最小的 a[j+1]=a[j];//排好序的序列元素后移 } a[j+1]=m;//标记元素放入空缺的位置 } } }
直接插入排序算法的时间复杂度为O(n^2),空间复杂度为O(1),其实一种稳定的排序算法。
4.总结
这三种简单的排序算法是学习后面希尔排序,堆排序,快速排序,归并排序的基础,只有理解了这些基础的简单排序算法,才能更好的理解和编写后面要写的改进排序算法。
阅读全文
0 0
- 排序算法之简单算法——java实现
- 排序算法之Java实现6——简单选择排序算法
- 算法——排序之简单排序
- 排序算法之—简单排序
- 排序算法之——快速排序(Java实现)
- 排序算法之——计数排序(Java实现)
- 排序算法之——计数排序(Java实现)
- 排序算法之——快速排序(Java实现)
- 排序算法—Java实现
- 【排序算法】简单选择排序(java实现)
- java实现简单排序算法:堆排序
- java实现简单排序算法:快速排序
- java实现简单排序算法:归并排序
- java实现简单排序算法:希尔排序
- 排序之冒泡算法的java语言简单实现
- Java实现排序算法之
- 排序算法之简单选择排序(Java)
- Java排序算法之简单选择排序
- java 时间日期 详解
- 图像反转
- AutoGridView:轻松实现微信朋友圈九宫格
- java基础------==和equals的区别
- mac 如何显示隐藏文件和.点开头文件?
- 排序算法之简单算法——java实现
- Linux最常用命令及快捷键整理
- Spring入门(基于Java的容器注解之@Bean)
- OpenGL glTexImage2D 纹理生成函数注意点
- 文章标题
- Greendao.gen使用方法总结
- [bzoj1293][SCOI2009]生日礼物(莫队)
- html基础教程-doctype
- JAVA多态