• 三种冒泡排序的实现与时间快慢的比较


    废话小说,看代码:

    import java.util.Date;
    
    public class BubbleSort {
    
        // 冒泡排序正常做法
        static void bubbleSort1(int a[]) {
            int temp;
            for (int i = 0; i < a.length; i++)
                for (int j = 1; j < a.length - i; j++)
                    if (a[j - 1] > a[j]) {
                        temp = a[j];
                        a[j] = a[j - 1];
                        a[j - 1] = temp;
                    }
        }
    
        // 防止排达的重新排冒泡排序,设置一个标志,如果这一趟发生了交换,则为true,否则为false。如果有一趟没有发生交换,说明排序完成
        static void bubbleSort2(int a[]) {
            int temp;
            boolean flag = true;
            int k = a.length;
            while (flag) {
                flag = false;
                for (int j = 1; j < k; j++)
                    if (a[j - 1] > a[j]) {
                        temp = a[j];
                        a[j] = a[j - 1];
                        a[j - 1] = temp;
                        flag = true;
                    }
                k--;
            }
    
        }
    
        // 排除前面没有排序,后面排好序的情况.记录最后交换的位置,第二次从头遍序到这个位置
        static void bubbleSort3(int a[]) {
            int k, flag = a.length;
            int temp;
            while (flag > 0) {
                k = flag;
                flag = 0;
                for (int i = 1; i < k; i++) {
                    if (a[i - 1] > a[i]) {
                        temp = a[i];
                        a[i] = a[i - 1];
                        a[i - 1] = temp;
                        flag = i;
                    }
                }
            }
        }
    
        public static void main(String[] args) {
    
            int arr1[] = {2, 3, 4, 5, 1, 2, 4, 5, 7, 3, 5, 8 , 3, 8, 9, 11, 12, 13,14,15,15,32,34,35,45,56,67,78,89,99 };
            int arr2[] = { 2, 3, 4, 5, 1, 2, 4, 5, 7, 3, 5, 8 , 3, 8, 9, 11, 12, 13,14,15,15,32,34,35,45,56,67,78,89,99 };
            int arr3[] = { 2, 3, 4, 5, 1, 2, 4, 5, 7, 3, 5, 8 , 3, 8, 9, 11, 12, 13,14,15,15,32,34,35,45,56,67,78,89,99 };
    
            long startTime = new Date().getTime();
            long endTime ;
            bubbleSort1(arr1);
            for (int i = 0; i < arr1.length; i++) {
                System.out.print(arr1[i] + "    ");
            }
            endTime = new Date().getTime();
            System.out.println(endTime - startTime);
            startTime = endTime;
            bubbleSort2(arr2);
            for (int i = 0; i < arr2.length; i++) {
                System.out.print(arr2[i] + "    ");
            }
            endTime = new Date().getTime();
            System.out.println(endTime - startTime);
            startTime = endTime ;
            bubbleSort3(arr3);
            for (int i = 0; i < arr3.length; i++) {
                System.out.print(arr3[i] + "    ");
            }
            endTime = new Date().getTime() ;
            System.out.println(endTime - startTime);
            
        }
    
    }

    结果显示如下:

    1 2 2 3 3 3 4 4 5 5 5 7 8 8 9 11 12 13 14 15 15 32 34 35 45 56 67 78 89 99     2
    1 2 2 3 3 3 4 4 5 5 5 7 8 8 9 11 12 13 14 15 15 32 34 35 45 56 67 78 89 99    1
    1 2 2 3 3 3 4 4 5 5 5 7 8 8 9 11 12 13 14 15 15 32 34 35 45 56 67 78 89 99    0

    由于数据的大小关系,结果不是很明显,但是可以很明显看出:所需要的时间是从大到小的。

  • 相关阅读:
    《C Primer Plus(第6版)中文版》一1.12 复习题
    《C Primer Plus(第6版)中文版》一1.12 复习题
    线程池多线程视频转码(完整版)
    mencoder的x264encopts选项参数略解
    ffmpeg多线程转码
    案例分析:程序媛记一次特殊的“故障”处理
    WINDOWS下CMake+MinGW64搭建C/C++编译环境
    lvs keepalived nginx-rtmp 视频流服务负载均衡系统搭建
    python 利用字典统计次数
    python 16进制 gbk转中文
  • 原文地址:https://www.cnblogs.com/qgzhan/p/3118967.html
Copyright © 2020-2023  润新知