用Java实现各种排序(1)---冒泡排序,直接插入排序,简单选择排序
2016-03-25 17:44
621 查看
排序算法是数据结构中经常遇到的问题,也是各种面试机试的极大热衷。笔者在准备找工作的过程中,通过《大话数据结构》一书进行复习,其中的编程是用C实现的。由于我要找的工作方向是Java,就把这些算法用Java实现了一遍,其实总体思想是一样的,只是自己记录总结一下,加深印象。
}
以上是三种最基本的算法,它们的计算复杂度都是一样的,适合小规模的排序。
冒泡排序
冒泡排序作为最基础最容易理解的排序,其方法就是通过比较相邻的数据,如果反序则,直到没有需要交换的数据时就排序完成。冒泡排序的时间复杂度为O(n*n)。具体代码如下:public class sort_maopao { public static void main(String[] args) { int[] a={2,5,4,3,5,7,9,8,6,15,11}; sort3(a); for(int i=0;i<a.length;i++) System.out.print(a[i]+" "); } public static void sort(int[] a){ boolean flag=true; //flag用来标记是否在本次循环中进行了数据交换,如果没有,则排序完成 for(int i=0;i<a.length-1&&flag;i++){ flag=false; for(int j=a.length-2;j>=i;j--){ //从后往前进行排序,可以在每次的交换中,使得较小的数据向前移动 if(a[j]>a[j+1]){ swap(a,j,j+1); flag=true; } } } } public static void swap(int[] a, int i,int j){ int temp=0; temp=a[i]; a[i]=a[j]; a[j]=temp; }
}
直接插入排序
直接插入排序的思想是把一个数插入到一个有序队列中,其时间复杂度为O(n*n)。具体代码如下:public class sort_insertSort { public static void main(String[] args) { // TODO Auto-generated method stub int[] a={2,5,4,3,5,7,9,8,6,15,11}; sort(a); for(int i=0;i<a.length;i++) System.out.print(a[i]+" "); } public static void swap(int[] a, int i,int j){ int temp=0; temp=a[i]; a[i]=a[j]; a[j]=temp; } public static void sort(int[] a){ int temp; for(int i=2;i<a.length;i++){ //先把数组第一个数当成是有序的,从第二个数开始进行插入 if(a[i]<a[i-1]){ temp=a[i]; //用temp记录待插入的数据 int j; for(j=i-1;a[j]>temp;j--){ //如果已排序部分的数据大约待插入数据,则数据后移 a[j+1]=a[j]; } a[j+1]=temp; //插入数据,由于前面对j--了,所以这里j要加1 } } } }
简单选择排序
简单选择排序就是通过n-i比较,每次找到n-i+1个数中最小的数,将其与第i个数交换。简单选择排序的时间复杂度也是O(n*n)。具体代码如下:public class sort_simpleSort { public static void main(String[] args) { // TODO Auto-generated method stub int[] a={2,5,4,3,5,7,9,8,6,15,11}; sort(a); for(int i=0;i<a.length;i++) System.out.print(a[i]+" "); } //每一次都找到最小的一个数,放在最前面 public static void sort(int[] a){ int min=0; for(int i=0;i<a.length-1;i++){ min=i; for(int j=i+1;j<a.length;j++){ if(a[j]<a[min]){ min=j; //记录最小数的位置 } } if(i!=min) //判断是否相等,如果不相等则进行交换 swap(a,i,min); } } public static void swap(int[] a, int i,int j){ int temp=0; temp=a[i]; a[i]=a[j]; a[j]=temp; } }
以上是三种最基本的算法,它们的计算复杂度都是一样的,适合小规模的排序。
相关文章推荐
- java输入输出的理解和掌握
- Java中的字符串常量池
- spring-boot 所有的配置
- JavaWeb项目开发案例精粹-第3章在线考试系统-006实体层
- JavaWeb项目开发案例精粹-第3章在线考试系统-005action层
- java并发编程synchronized、volatile关键字及ReentrantLock类总结
- Spring mvc+hibernate+freemarker(开源项目)
- JavaWeb项目开发案例精粹-第3章在线考试系统-004Service层
- 本体学习笔记--在eclipse里操作本体的准备
- JavaWeb项目开发案例精粹-第3章在线考试系统-003Dao层
- Java 学习系列:LinkedList 的实现原理
- 理解Java虚拟机体系结构
- JavaWeb项目开发案例精粹-第3章在线考试系统-002配置文件及辅助类
- (补)环境变量的配置以及eclipse的快捷键
- java多线程小结,及解决应用挂死的问题
- 分析JAVA应用CPU占用过高的问题
- 初探Java8中的HashMap(转)
- Hibernate缓存问题
- java反射获取字段以及获取字段值和设置字段值
- think in java学习笔记