排序的方法有很多,一般言,很难说哪一种方法是最好的。每一种方法都有优缺点,有各自应用的环境。排序一般会进行两种操作1、比较两关键字大小;2、将记录从一个位置移到另一个位置;前者通常来说是必要的,而后者则可以通过改变记录存储方式来避免。后面还会用一篇专门的文章来讨论一下怎么来分析这些算法的复杂度。还请您留意,应该这就是最近一周出来!(2015.6.20前)
常见的内部排序算法大致可以分为以下六类共十种:
选择排序:(1)直接选择排序;(2)堆排序;
交换排序:(3)冒泡排序;(4)快速排序;
插入排序: (5)直接插入 排序; (6)折半插入排序;(7)Shell排序;
(8)归并排序;
(9)筒式排序;
(10)基数排序;
下面就将用十篇文章分别归纳这十种排序,这一篇是直接选择排序:
直接选择排序是一种相对简单的排序算法,其大概思想是:从第一个元素开始分别于后面每个元素相比,如果后面元素小于第一个元素,则交换它们。很明显,这样一轮下来,排在第一位的元素就是这组待排序元素中最小的。然后,再重复上面操作,找到第二小的元素。如此不断往复,假如共用n个元素,则经过n-1次操作则可完成全部操作。下面就是它的源代码实现:
//a example to SelectSort
//blog.csdn.net/code_7
//HanChun at XiDian University
//输入数据是:7 2 9 1 4 3 5
package mywork.c20150613;
import java.util.Arrays;
public class SelectSort {
public static int[] selectsort(int datas[]){
for(int i = 0; i < datas.length; i++){
for(int j = i + 1; j < datas.length; j++){
if(datas[i] > datas[j]){
int tem;
tem = datas[i];
datas[i] = datas[j];
datas[j] = tem;
}
}
}
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)));
}
}
运行结果为:
排序之前的元素为:[7, 2, 9, 1, 4, 3, 5]
排序之后的元素为: [1, 2, 3, 4, 5, 7, 9]
仔细分析,上面代码还是有改进之处的:比如,我们我们在每趟比较的过程中只需要找到最小的在交换就可以了。但是上面的代码会有可能交换多次,这样显然降低了程序运行的效率。想到这里以后,我们对上面的代码做下面修改:
//a example to SelectSort
//blog.csdn.net/code_7
//HanChun at XiDian University
//输入数据是:7 2 9 1 4 3 5
package mywork.c20150613;
import java.util.Arrays;
public class SelectSort {
public static int[] selectsort(int datas[]){
for(int i = 0; i < datas.length; i++){
int minIndex = i;
<strong>for(int j = i + 1; j < datas.length; j++){
if(datas[i] > datas[j]){
minIndex = i;
}
}
if(minIndex != i){
int tem;
tem = datas[i];
datas[i] = datas[minIndex];
datas[minIndex] = tem;
}
}</strong>
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)));
}
}
注意加粗部分的改变!生活处处是学问,大家晚安!