冒泡排序:
冒泡排序是排序中最简单的排序,也可能是大家接触到的第一个排序算法
排序思想:
比较相邻两数的大小,然后调换位置,使用嵌套循环,外循环控制总轮数,内循环控制当轮需要比较的总数:
public class Sort {
public static void main(String[] args) {
// 随机生成x个随机数
int[] arr = new int[100000];
for (int i = 0; i < arr.length; i++) {
arr[i] = (int) (Math.random() * (arr.length - 1 + 1) + 1);
}
long start = System.currentTimeMillis();
maoPao(arr);
// Arrays.sort(arr);
long end = System.currentTimeMillis();
System.out.println("所花费的时间为:" + (end - start));
}
static void maoPao(int[] arr) {
for (int i = 0; i < arr.length; 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;
}
}
}
}
}
效果分析:
这里我随机生成了一个十万内容的无序数组,冒泡排序用时
毫秒
可见冒泡排序效率比较低
而Java工具类Arrays中的快速排序用时为
毫秒
快速排序参考
private static void quickEx(int[] arr, int sta, int end) {
int left = sta;
int right = end;
int temp;
//判断左右数,避免是最后一轮,左边比右边大
if (left > right) {
return;
}
//基准数取左边第一个
int base = arr[sta];
while (left < right) {
//基数在左边,那么从右边开始比较
while (arr[right] >= base && left < right) {
right--;
}
while (arr[left] <= base && left < right) {
left++;
}
//此时左右两个指针斗找到比基准数大的和比基准数小的,开始调换
if (left < right) {
temp = arr[right];
arr[right] = arr[left];
arr[left] = temp;
}
}
//所有位置调换完毕,将基准数放入相撞点,以此左右分割完毕,左边是小于等于基准数的,右边是大于等于基准数的
arr[sta] = arr[left];
arr[left] = base;
//递归 因为得去除中间的数,所左边最大减一 右边最小加一
quickEx(arr, sta, right - 1);
quickEx(arr, right + 1, end);
}