冒泡排序实现代码:
public static void sort(int[] arr) {
for (int i = 1; i < arr.length; i++) {
for (int j = 0; j < arr.length - i; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
源码分析:冒泡排序的思路是优先把较大元素放到数组最后位置。程序开始运行时i=1,j=[0,arr.length-1],最内层for循环从数组第一个位置开始,比较前两个位置元素大小,如果更靠前的元素更大,则交换两个元素位置,直到数组末尾,此时已经把数组内最大元素移动到数组末尾。由于数组最末位置已经排序,第二次循环不需要再比较到最末位置,此时i=2,j=[0,arr.length-2],经过循环,将第二大元素排到数组倒数第二个位置。以此类推,直到完成最后两个元素的排序。
冒泡排序的原理其实就是优先对较大元素进行排序,一般放到数组尾部,作为已排序部分,前面部分作为未排序部分,然后前部找出较大元素,直到只剩一个元素。
生成一个大小为10000的随机数组测试:
public static void main(String[] args) {
int length = 10000;
int[] arr = new int[length];
Random random = new Random();
for (int i = 0; i < length; i++) {
arr[i] = random.nextInt(length);
}
long time = System.currentTimeMillis();
sort(arr);
System.out.println(System.currentTimeMillis() - time);
}