java排序算法
2016-06-27 10:21
507 查看
一、冒泡排序
以一个整数数组为例从小到大排序,从第一个元素开始循环,不断的和下一个元素比较,如果较小,不做交换,若较大,就交换位置。这样循环到最后,最大的元素就在最后面,此时继续从第一个元素开始循环,从左到右,两两比较,这一次只需要比较到倒数第二个位置,因为最大的数值已经占据了最后位置,以此类推,最终完成排序。
二、选择排序
以整数数组为例从小到大排序,从第一个元素开始从左往右循环,找到一个最小的元素就把它放在最左边,由于到倒数二个元素时候如果最后一个元素较小就会移到左边,倒数第二个元素会自动变为最后一个元素,所以第一个循环要在数组长度-1索引处结束,按照这个原理,个人实现代码如下:
三、插入排序
假设一组人要从矮到高排列,可以先从左到右找到一个部分有序队列,java培训也就是找到一个人,这个人之前的队列刚好是从矮到高排列的,那么从这个人开始,不断的和之前的人比较,较矮的话就交换位置,一直比较到比前面一个人高为止,最后完成排序,图示和实现如下:
以一个整数数组为例从小到大排序,从第一个元素开始循环,不断的和下一个元素比较,如果较小,不做交换,若较大,就交换位置。这样循环到最后,最大的元素就在最后面,此时继续从第一个元素开始循环,从左到右,两两比较,这一次只需要比较到倒数第二个位置,因为最大的数值已经占据了最后位置,以此类推,最终完成排序。
package com.henrysunjavawebstudy.datastructure_algorithms; /* * 排序算法 * 冒泡排序 */ public class PaiXu { /** * @param args */ public static void main(String[] args) { ArrayBub ab=new ArrayBub(4); ab.inert(7); ab.inert(4); ab.inert(1); ab.inert(8); ab.bubbSort(); ab.display(); } } class ArrayBub { private int[] a; private int nElemt; public ArrayBub(int max) { a=new int[max]; nElemt=0; } public void inert(int value) { a[nElemt]=value; nElemt++; } public void display() { for (int i = 0; i < a.length; i++) { System.out.println(a[i]); } } //排序代码 public void bubbSort() { int temp; for (int i = 0; i < a.length; i++) { for (int j =0; j < a.length-i-1; j++) { if(a[j]>a[j+1]) { temp=a[j]; a[j]=a[j+1]; a[j+1]=temp; } } } } }
二、选择排序
以整数数组为例从小到大排序,从第一个元素开始从左往右循环,找到一个最小的元素就把它放在最左边,由于到倒数二个元素时候如果最后一个元素较小就会移到左边,倒数第二个元素会自动变为最后一个元素,所以第一个循环要在数组长度-1索引处结束,按照这个原理,个人实现代码如下:
//选择排序 public void chooseSort() { int temp,i,j,mark=0; for (i = 0; i < a.length-1; i++) { //最左边的元素 temp=a[i]; for(j=i;j<a.length;j++) { //开始比较,较小的值就赋给临时变量,并把索引做个标记 if(temp>a[j]) { temp=a[j]; mark=j; } } if(a[mark]<a[i]) { temp=a[mark]; a[mark]=a[i]; a[i]=temp; } } }
三、插入排序
假设一组人要从矮到高排列,可以先从左到右找到一个部分有序队列,java培训也就是找到一个人,这个人之前的队列刚好是从矮到高排列的,那么从这个人开始,不断的和之前的人比较,较矮的话就交换位置,一直比较到比前面一个人高为止,最后完成排序,图示和实现如下:
///插入排序 public void insertSort() { int temp,mark=0; //先找到一个之前的队列刚好是从小到大排列的数值,并把位置标记 for (int i = 0; i < a.length-1; i++) { if(a[i]>a[i+1]) { mark=i+1; } break; } //从标记位置开始循环,不断的和前面的数据两两比较,较小就交换位置,较大不变 for(int i=mark;i<a.length;i++) { for(int j=i;j>0;j--) { if(a[j]<a[j-1]) { temp=a[j]; a[j]=a[j-1]; a[j-1]=temp; } } } }
相关文章推荐
- FreeMarker与Spring框架及SSM的整合过程
- Java基础概念
- java 异步处理
- bitmap 缩放 java.lang.IllegalArgumentException: width and height must be > 0
- 华为机试---生成格雷码
- Spring带给我们什么
- Javacore分析(转载)
- 使用POI在Excel单元格插入符号(Symbol)
- Java基础之异常Exception(5)---小练习
- Java中的拆箱和装箱
- MyEclipse + Maven开发Web工程的详细配置过程
- Java对MySQL数据库进行连接、查询和修改
- struts2复习2 helloworld
- Eclipse Java注释模板设置详解
- SSM框架(多模块)——Spring+Mybatis
- 身份证号码验证算法
- java抓取网页源代码《转载》
- JAVA WordVec 的一个实现
- java计时器
- java 并发编程学习之三 ---- ReentrantLock