当前位置:编程学习 > JAVA >>

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;
            }
        }
    } --------------------编程问答--------------------
引用 2 楼 keenleung1992 的回复:
哦哦,你用的是插入排序,冒泡排序应该是:
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[……
囧,果然写错了,冒泡排序不是这个样子的吗,刚百度找的,跟你代码也不一样。。

冒泡排序(BubbleSort)的基本概念是:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。至此第一趟结束,将最大的数放到了最后。在第二趟:仍从第一对数开始比较(因为可能由于第2个数和第3个数的交换,使得第1个数不再小于第2个数),将小数放前,大数放后,一直比较到倒数第二个数(倒数第一的位置上已经是最大的),第二趟结束,在倒数第二的位置上得到一个新的最大数(其实在整个数列中是第二大的数)。如此下去,重复以上过程,直至最终完成排序。
--------------------编程问答--------------------
引用 3 楼 wapigzhu 的回复:
引用 2 楼 keenleung1992 的回复:哦哦,你用的是插入排序,冒泡排序应该是:
private static void sort(int[] array){
        for(int i = array.length; i>0 ; i--){
            for(int j = 0; j < i; j++ ){
           ……

哦哦,应该是:
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;
            }
        }
    } --------------------编程问答--------------------
引用 3 楼 wapigzhu 的回复:
引用 2 楼 keenleung1992 的回复:哦哦,你用的是插入排序,冒泡排序应该是:
private static void sort(int[] array){
        for(int i = array.length; i>0 ; i--){
            for(int j = 0; j < i; j++ ){
           ……


首先理解概念,然后找思路,最后写代码实现,水到渠成!
补充:Java ,  Java相关
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,