前言
最近在补自己的基础知识,发现很多知识看了后容易忘记,于是开始进行对一些知识进行总结,方便以后自己查看。
这里主要是对遇到过的排序算法进行归纳总结,同时比较各自的优缺点。
目前整理的排序算法如下:
1.插入排序
2.选择排序
一、插入排序
思想:将未进行排序的数据插入已经排序好的数据中。
java示例:
import java.text.SimpleDateFormat;
import java.util.Date;
public class InsertSort {
public static void main(String[] args) {
SimpleDateFormat startTime = new SimpleDateFormat("yyyy:MM:dd:HH:mm:ss");
System.out.println("排序开始时间:"+startTime.format(new Date()));
//测试80万个数据的排序
int[] list = new int[800000];
for (int index = 0; index < 800000; index++) {
list[index] = (int)(Math.random() * 80000);
}
int temp;
for(int i=1; i<list.length;i++){
for(int first = 0;first<i;first++){
if(list[i]<list[first]){
temp = list[i];
System.arraycopy(list,first,list,first+1,i-first);
list[first] = temp;
}
}
}
SimpleDateFormat endTime = new SimpleDateFormat("yyyy:MM:dd:HH:mm:ss");
System.out.println("排序结束时间:"+endTime.format(new Date()));
}
}
测试一次结果:8分07秒
参考:插入排序动图(以参考程序在本地跑的测试一次结果为:25分34秒)
一、选择排序
思想:依次选择数组中从小到大的数(或者从大到小的数),再进行交换。总之适合小规模数据排序。
java示例:
import java.util.Arrays;
public class SelectSort {
public static void main(String[] args) {
int[] list ={12,23,11,2,52,61};
int save,temp;
for(int i=0;i<list.length;i++){
//选择的数的索引
save = i;
for(int j=i+1;j<list.length;j++){
if(list[j]<list[save]){
save = j;
}
}
//交换
temp = list[i];
list[i] = list[save];
list[save] = temp;
}
System.out.println(Arrays.toString(list));
}
}
参考:选择排序
(未完待续)