冒泡排序是一种简单的排序算法,它也是一种稳定排序算法。其实现原理是重复扫描待排序序列,并比较每一对相邻的元素,当该对元素顺序不正确时进行交换。一直重复这个过程,直到没有任何两个相邻元素可以交换,就表明完成了排序。
一般情况下,称某个排序算法稳定,指的是当待排序序列中有相同的元素时,它们的相对位置在排序前后不会发生改变。
假设待排序序列为 (5,1,4,2,8),如果采用冒泡排序对其进行升序(由小到大)排序,则整个排序过程如下所示:
- 第一轮排序,此时整个序列中的元素都位于待排序序列,依次扫描每对相邻的元素,并对顺序不正确的元素对交换位置,整个过程如图 1 所示。
代码实现:
import java.util.Calendar;
import java.util.Random;
public class Demo冒泡时间 {
public static Random R = new Random();
public static void main(String[] args) {
int arr[] = new int[100000];
for (int i = 0; i < 100000; i++) { //100000
int j = R.nextInt(10000); //(int)(Math.random*100)
arr[i] = j;
}
long t1 = System.currentTimeMillis(); //系统时间的,当前毫秒数;
for (int i = 0; i < arr.length - 1; i++) {
for (int j = 0; j < arr.length - i - 1; j++) {
if (arr[j] < arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
long t2 = System.currentTimeMillis();
int num = 0;
for (int n : arr) {
num++;
System.out.print(n + "\t");
if (num % 10 == 0) {
System.out.println();
}
}
Calendar c = Calendar.getInstance();
c.setTimeInMillis(t2 - t1);
System.out.println("耗时" + c.get(Calendar.MINUTE) + "分" + c.get(Calendar.SECOND) + "秒" + c.get(Calendar.MILLISECOND) + "毫秒");
}
}
时间测试 5 5 5 5 4 4 4 4 4 4 4 4 4 4 4 4 4 3 3 3 3 3 3 3 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 耗时0分16秒737毫秒 ————————————————
选择排序
每一次从待排序的数据元素中选出最小(或最大)的一个元素,将元素存放在序列的起始位置(即与待排序列的第一个元素的位置进行交换)。然后再从剩余的未排序元素中寻找最小(或最大)的元素,然后存放在已排序序列的末尾。以此类推,直到将待排序的元素全部排完。
import java.util.Random;
public class Demo选择排序时间 {
public static void main(String[] args) {
int arr[] = new int[100000];
Random r = new Random();
for (int i = 0; i < 100000; i++) {
arr[i] = r.nextInt(10000);
}
long t1 = System.currentTimeMillis();
for (int i = 0; i < arr.length - 1; i++) {
int MinIndex = i;
for (int j = i + 1; j < arr.length; j++) {
if (arr[j] < arr[MinIndex]) {
MinIndex = j;
}
}
int temp = arr[i];
arr[i] = arr[MinIndex];
arr[MinIndex] = temp;
}
long t2 = System.currentTimeMillis();
int num = 0;
for (int n : arr) {
num++;
System.out.print(n + "\t");
if (num % 20 == 0) {
System.out.println();
}
}
Calendar c = Calendar.getInstance();
c.setTimeInMillis(t2 - t1);
System.out.println("耗时" + c.get(Calendar.MINUTE) + "分" + c.get(Calendar.SECOND) + "秒" + c.get(Calendar.MILLISECOND) + "毫秒");
}
}
9986 9986 9987 9987 9987 9987 9988 9988 9988 9988 9988 9988 9988 9988 9988 9988 9988 9988 9988 9988 9988 9989 9989 9989 9989 9989 9989 9990 9990 9990 9990 9990 9990 9990 9990 9990 9991 9991 9991 9991 9991 9991 9991 9991 9991 9992 9992 9992 9992 9992 9992 9992 9992 9992 9992 9993 9993 9993 9993 9993 9993 9993 9993 9993 9993 9994 9994 9994 9994 9994 9994 9994 9994 9994 9994 9994 9995 9995 9995 9995 9995 9996 9996 9996 9996 9996 9996 9996 9996 9996 9996 9996 9997 9997 9997 9997 9997 9997 9997 9997 9998 9998 9998 9998 9998 9998 9998 9998 9998 9998 9998 9998 9999 9999 9999 9999 9999 9999 9999 9999 耗时0分4秒946毫秒 ————————————————