1,冒泡排序
代码实现
第一步:从arr[0]开始,最大值冒泡到arr[n-1];
第二步:从arr[0]开始,最大值冒泡到arr[n-2];
以此类推
public class MaoPao {
public static void main(String[] args) {
// TODO Auto-generated method stub
// int[] arr = { 4, 3, 2, 1, 0 };
int[] arr = { 0, 4, 2, 2, 4 };
int temp = 0;
Boolean flag = true;
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - 1 - i; j++) {
if (arr[j] > arr[j + 1]) {
temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
flag = false;
}
}
if (flag) {
break;//一次都没有替换说明已经排好顺序了
} else {
flag = true;
}
}
//输出验证
for (int i : arr) {
System.out.println(i);
}
}
}
2,选择排序
第一步:从arr[0]到arr[n-i]中选择最小的,跟arr[0]做交换
第二步:从arr[1]到arr[n-1]中选择最小的,跟arr[1]做交换
以此类推
代码实现
public static void Select(int[] arr) {
for(int i=0; i<arr.length-1; i++) {
int min = arr[i];
int minIndex = i;
for(int j=0+i; j<arr.length; j++) {
if(arr[j]<arr[minIndex]) {
min = arr[j];
minIndex = j;
}
}
//如果不相等说明arr[i]不是最小值,需要跟最小值做交换
if(minIndex!=i) {
arr[minIndex] = arr[i];
arr[i] = min;
}
}
}
测试数据
80000个数需要两秒左右
public static void main(String[] args) {
// TODO Auto-generated method stub
int[] arr = new int [80000];
for(int i =0; i<80000; i++) {
arr[i] = (int)(Math.random()*80000);
}
SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println(s.format(new Date()));
Select(arr);
System.out.println(s.format(new Date()));
}
3,插入排序
从arr[1]到arr[n-1],依次向前找到自己的位置插入。 一个value来存需要插入的值,一个index来存前一个数的下标 所以依次向前判断,如果index处的值比value大,就把index处的值往后移,index-1继续向前,找到0时或index处的值比value小,就将value的值插入arr[index+1]
代码实现
public static void sort(int[] arr) {
for(int i=1; i<arr.length;i++) {
int value = arr[i]; //要插入的下标
int index = i-1;//前面数的下标
while(index >= 0 && arr[index] > value) {
arr[index+1] = arr[index];
index--;
}
arr[index+1] = value;
}
}
测试速度
80000个数据,大约需要1到2秒
int[] arr = new int[80000];
for(int i=0; i<80000; i++) {
arr[i] = (int) (Math.random()*80000);
}
SimpleDateFormat s = new SimpleDateFormat("yyyy-MM-dd HH:dd:ss");
System.out.println(s.format(new Date()));
sort(arr);
System.out.println(s.format(new Date()));