排序的方法有很多,一般言,很难说哪一种方法是最好的。每一种方法都有优缺点,有各自应用的环境。排序一般会进行两种操作1、比较两关键字大小;2、将记录从一个位置移到另一个位置;前者通常来说是必要的,而后者则可以通过改变记录存储方式来避免。后面还会用一篇专门的文章来讨论一下怎么来分析这些算法的复杂度。还请您留意,应该这就是最近一周出来!(2015.6.20前)
常见的内部排序算法大致可以分为以下六类共十种:
选择排序:(1)直接选择排序;(2)堆排序;
交换排序:(3)冒泡排序;(4)快速排序;
插入排序: (5)直接插入 排序; (6)折半插入排序;(7)Shell排序;
(8)归并排序;
(9)筒式排序;
(10)基数排序;
下面就将用十篇文章分别归纳这十种排序,这一篇是冒泡排序:
冒泡排序是大家最早涉及的排序算法之一,算法思想简单,容易实现。n个数据排序,一般需要进行n-1趟冒泡过程(如果其中某一趟没有数据交换的发生,则提前结束,也就是比较趟数小于n-1)。冒泡排序非常形象,简单说就是从第一个元素开始和后面一个元素比较,如果前面大于后面,则交换它们;然后,再让第二个和第三个比较,第二个如果大于第三个,则也交换;这样不断下去,就跟冒泡一样,最大的就留到了最后。下次再从1到n-1,最后把第二大元素找出来放到n-1位置。如果过程中某次没有发生交换,则提前结束排序。源代码如下:
package mymork.c20150614;
//a example to SelectSort
//blog.youkuaiyun.com/code_7
//HanChun at XiDian University
//输入数据是:7 2 9 1 4 3 5
import java.util.Arrays;
public class BubbleSort {
public static int[] selectsort(int datas[]){
for(int i = 0; i < datas.length; i ++ ){
boolean flag = false; //标志位,判断是否能提前结束排序
for(int j = 0; j < datas.length - i - 1; j++){
if(datas[j] > datas[j+1]){
int tem;
tem = datas[j];
datas[j] = datas[j+1];
datas[j+1] = tem;
flag = true;
}
}
if(!flag){
return datas;
}
}
return datas;
}
public static void main(String[] args) {
int[] datas = new int[]{7, 2, 9, 1, 4, 3 ,5};
System.out.println("排序之前的元素为:" + Arrays.toString(datas));
System.out.println("排序之后的元素为: " + Arrays.toString(selectsort(datas)));
}
}