package sort;
import java.util.Random;
public class sort {
public static void bubbleSort(int[] arr) {
/*
冒泡排序算法的原理如下:
1. 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
2. 对每一对相邻元素做同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
3. 针对所有的元素重复以上的步骤,除了最后一个。
4. 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
*/
System.out.println("冒泡排序:");
System.out.print("排序前:");
for (int item : arr) {
System.out.print(item + "\t");
}
System.out.println();
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;
}
}
}
System.out.print("排序后:");
for (int item : arr) {
System.out.print(item + "\t");
}
System.out.println();
}
public static void quickSort(int[] arr, int left, int right) {
/*
快速排序(Quicksort)是对冒泡排序的一种改进。
它的基本思想是:通过一趟排序将要排序的数据分割成独立的两部分,
其中一部分的所有数据都比另外一部分的所有数据都要小,
然后再按此方法对这两部分数据分别进行快速排序,
整个排序过程可以递归进行,以此达到整个数据变成有序序列。
一趟快速排序的算法是:
1. 设置两个变量i、j,排序开始的时候:i=0,j=N-1;
2. 以第一个数组元素作为关键数据,赋值给key,即key=A[0];
3. 从j开始向前搜索,即由后开始向前搜索(j--),找到第一个小于key的值A[j],将A[j]和A[i]的值交换;
4. 从i开始向后搜索,即由前开始向后搜索(i++),找到第一个大于key的A[i],将A[i]和A[j]的值交换;
5. 重复第3、4步,直到i=j;
(3,4步中,没找到符合条件的值,即3中A[j]不小于key,4中A[i]不大于key的时候改变j、i的值,使得j=j-1,i=i+1,直至找到为止。
找到符合条件的值,进行交换的时候i, j指针位置不变。另外,i==j这一过程一定正好是i+或j-完成的时候,此时令循环结束)。
*/
if (left >= right)
return;
int key = arr[left];
int i = left;
int j = right;
while (i < j) {
while (arr[j] > key) j--;
while (arr[i] < key) i++;
int temp = arr[j];
arr[j] = arr[i];
arr[i] = temp;
}
quickSort(arr, left, i - 1);
quickSort(arr, i + 1, right);
}
public static void main(String[] args) {
int[] bubbleArr = new int[10000];
Random random = new Random();
for (int i = 0; i < bubbleArr.length; i++) {
bubbleArr[i] = random.nextInt();
}
long start = System.currentTimeMillis();//获取当前操作系统时间,以毫秒表示
bubbleSort(bubbleArr);
long end = System.currentTimeMillis();
int[] quickArr = new int[10000];
for (int i = 0; i < quickArr.length; i++) {
quickArr[i] = random.nextInt();
}
System.out.println("快速排序:");
System.out.print("排序前:");
for (int item : quickArr) {
System.out.print(item + "\t");
}
System.out.println();
quickSort(quickArr, 0, quickArr.length - 1);
System.out.print("排序后:");
for (int item : quickArr) {
System.out.print(item + "\t");
}
System.out.println();
long quickStart = end;
long quickEnd = System.currentTimeMillis();
System.out.println("冒泡排序时间:" + (end - start));
System.out.println("快速排序时间:" + (quickEnd - quickStart));
}
}
结果:

结论:对比之后,发现使用1万条随机数时,快速排序的优势就显得很明显
本文对比了冒泡排序和快速排序两种算法的性能。通过使用1万条随机数进行测试,展示了冒泡排序和快速排序的具体实现及排序前后数组的状态,并记录了各自的运行时间,证明了快速排序在大数据量下更优。
613

被折叠的 条评论
为什么被折叠?



