java、数据结构:为什么使用冒泡排序时,数据逆序反而比随机的要快?
以下是程序截图:请各位指教,本人不胜感激...谢谢... --------------------编程问答-------------------- 你确定你是冒泡排序?
很久没写冒泡排序了。。写错了见谅
--------------------编程问答-------------------- 哦哦,你用的是插入排序,冒泡排序应该是:
public static void main(String[] args) {
int[] array = new int[100000];
for(int i = 0 ; i < array.length; i ++){
array[i] = (int) (10000 * Math.random());
}
long time = System.currentTimeMillis();
sort(array);
System.out.println("random sort:" + (System.currentTimeMillis() - time));
checkSort(array);
for(int i = 0 ; i < array.length; i ++){
array[i] = 10000 - i;
}
time = System.currentTimeMillis();
sort(array);
System.out.println("desc sort:" + (System.currentTimeMillis() - time));
}
private static void checkSort(int[] array){
for(int i = 1; i < array.length; i ++){
if(array[i - 1] > array[i])
throw new IllegalArgumentException("error");
}
}
private static void sort(int[] array){
for(int i = 1; i < array.length; i ++){
for(int j = i; j > 0; j --){
if(array[j - 1] > array[j]){
int temp = array[j - 1];
array[j - 1] = array[j];
array[j] = temp;
}else
break;
}
}
}
运行了很多次,都是7s和14s左右
random sort:7121
desc sort:14200
private static void sort(int[] array){
for(int i = array.length; i>0 ; i--){
for(int j = 0; j < i; j++ ){
if(array[j] > array[j+1]){
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}else
break;
}
}
} --------------------编程问答-------------------- 囧,果然写错了,冒泡排序不是这个样子的吗,刚百度找的,跟你代码也不一样。。
--------------------编程问答--------------------
冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。
哦哦,应该是:
private static void sort(int[] array){
for(int i = array.length-1; i>0 ; i--){
for(int j = 0; j < i; j++ ){
if(array[j] > array[j+1]){
int temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}else
break;
}
}
} --------------------编程问答--------------------
首先理解概念,然后找思路,最后写代码实现,水到渠成!
补充:Java , Java相关