欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

冒泡排序与快速排序详解

程序员文章站 2024-02-06 09:10:28
常用排序:冒泡排序与快速排序详解。在排序算法中,冒泡排序和快速排序可以算是排序算法入门必会的两种排序了,今天和大家来分析一下如何快速理解并掌握这两种排序。首先冒泡排序是初学者最常用的排序,所以我们先来详解下冒泡排序。1.冒泡排序冒泡排序,看字面意义就是有大泡泡和小泡泡在水中同时上浮,而大的泡泡就上升的快,小的泡泡就上升的相对较慢,从而产生了一定的速度差,这就产生了大的泡泡在小的泡泡上面,也就是按从一定的大小顺序排好了顺序。当然,这里的比喻和冒泡排序有点不同,冒泡排序是针对数值排序,且算法是有稍微...

常用排序:冒泡排序与快速排序详解。

在排序算法中,冒泡排序和快速排序可以算是排序算法入门必会的两种排序了,今天和大家来分析一下如何快速理解并掌握这两种排序。首先冒泡排序是初学者最常用的排序,所以我们先来详解下冒泡排序。

1.冒泡排序

冒泡排序,看字面意义就是有大泡泡和小泡泡在水中同时上浮,而大的泡泡就上升的快,小的泡泡就上升的相对较慢,从而产生了一定的速度差,这就产生了大的泡泡在小的泡泡上面,也就是按从一定的大小顺序排好了顺序。当然,这里的比喻和冒泡排序有点不同,冒泡排序是针对数值排序,且算法是有稍微的差别。

这里我们使用大家喜欢的java语言来示范,我们取出20个10以内的数字:

int[] sortInts = new int[20];
for (int i = 0; i < 20; i++) {
    int random = (int) (Math.random() * 10);
    sortInts[i] = random;
}

例如我们得到以下数值:

2、8、6、6、6、9、5、1、9、2、7、3、9、8、9、0、9、2、0、6、

下面要对这些数字进行冒泡排序,我们使用的方法是,两两对比,拿数组第一个数值对比第二个数值并把较大的替换到后面,然后是第一个数值对比第三个数值把较大的替换到后面,然后是第一个数值对比第四个数值把较大的替换到后面,直到对比到最后一个,第一轮对比结束。

第一轮对比结果:

0、8、6、6、6、9、5、2、9、2、7、3、9、8、9、1、9、2、0、6、

不难看出,第一个数值我们已经排序完成了,后面进行第二轮排序,我们拿第二个数值开始对比,第二个数值对比第三个数值并把较大的替换到后面,第二个数值对比第四个数值并把较大的替换到后面,直到对比到最后一个,第二轮对比结束。

第二轮对比结果:

0、0、8、6、6、9、6、5、9、2、7、3、9、8、9、2、9、2、1、6、

后面延续这样的对比最终排序完成。上面是理解层面的解释,下面给出代码实现:

    public static void main(String args[]){
        int[] sortInts = new int[20];
        for (int i = 0; i < 20; i++) {
            int random = (int) (Math.random() * 10);
            sortInts[i] = random;
        }
        printArrays(sortInts);
        bubbleSort(sortInts);
    }

    //冒泡排序
    private static void bubbleSort(int[] integers){
        for(int i = 0; i<integers.length-1; i++){
            for(int j=i; j<integers.length; j++){
                if(integers[i] > integers[j]){
                    int temp = integers[i];
                    integers[i] = integers[j];
                    integers[j] = temp;
                }
            }
        }
        printArrays(integers);
    }
    
    private static void printArrays(int[] a) {
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i] + "、");
        }
    }

冒泡排序结果:

0、0、1、2、2、2、3、5、6、6、6、6、7、8、8、9、9、9、9、9、

 

注:本文来自风马博客原创,如有不对之处请留言指出。

2.快速排序

快速排序是冒泡排序的一种优化,稍微比冒泡排序要难理解一点点,快速排序的优点就是快速,缺点是不稳定。

快速排序的原理:

1.取数组中一个数值作为基数.

2.把大于此基数的换到数组的右侧,小于此基数的换到数组的左侧.

3.对换基数与中间数值的位置

4.重复2操作,直到数值数量为1

不难看出4步骤用到了递归方法,快速排序java实现代码如下:

 public static void main(String args[]){
        int[] sortInts = new int[20];
        for (int i = 0; i < 20; i++) {
            int random = (int) (Math.random() * 10);
            sortInts[i] = random;
        }
        printArrays(sortInts);
        fastSort(sortInts,0,sortInts.length-1);
    }

    //快速排序
    private static void fastSort(int[] integers,int left,int right){

        if(left>right){
            return;
        }

        int base = integers[left];
        int i = left;
        int j = right;
        while(i < j){

            while (integers[j]>=base && i<j){
                j--;
            }

            while (integers[i]<=base && i<j){
                i++;
            }

            int temp = integers[i];
            integers[i] = integers[j];
            integers[j] = temp;
        }

        integers[left] = integers[i];
        integers[i] = base;

        fastSort(integers,left,i-1);
        fastSort(integers,i+1,right);

        printArrays(integers);
    }

    private static void printArrays(int[] a) {
        for (int i = 0; i < a.length; i++) {
            System.out.print(a[i] + "、");
        }
    }

快速排序输出结果如下:

2、5、0、0、4、6、4、2、5、8、2、5、2、0、8、2、1、8、1、7、
0、0、0、1、1、2、4、2、5、8、2、5、2、6、8、2、4、8、5、7、
0、0、0、1、1、2、4、2、5、8、2、5、2、6、8、2、4、8、5、7、
0、0、0、1、1、2、4、2、5、8、2、5、2、6、8、2、4、8、5、7、
0、0、0、1、1、2、4、2、5、8、2、5、2、6、8、2、4、8、5、7、
0、0、0、1、1、2、4、2、5、8、2、5、2、6、8、2、4、8、5、7、
0、0、0、1、1、2、2、2、2、2、4、5、8、6、8、5、4、8、5、7、
0、0、0、1、1、2、2、2、2、2、4、5、8、6、8、5、4、8、5、7、
0、0、0、1、1、2、2、2、2、2、4、5、8、6、8、5、4、8、5、7、
0、0、0、1、1、2、2、2、2、2、4、5、8、6、8、5、4、8、5、7、
0、0、0、1、1、2、2、2、2、2、4、4、5、6、8、5、8、8、5、7、
0、0、0、1、1、2、2、2、2、2、4、4、5、5、5、6、8、8、8、7、
0、0、0、1、1、2、2、2、2、2、4、4、5、5、5、6、8、8、8、7、
0、0、0、1、1、2、2、2、2、2、4、4、5、5、5、6、7、8、8、8、
0、0、0、1、1、2、2、2、2、2、4、4、5、5、5、6、7、8、8、8、
0、0、0、1、1、2、2、2、2、2、4、4、5、5、5、6、7、8、8、8、
0、0、0、1、1、2、2、2、2、2、4、4、5、5、5、6、7、8、8、8、
0、0、0、1、1、2、2、2、2、2、4、4、5、5、5、6、7、8、8、8、
0、0、0、1、1、2、2、2、2、2、4、4、5、5、5、6、7、8、8、8、
0、0、0、1、1、2、2、2、2、2、4、4、5、5、5、6、7、8、8、8、
0、0、0、1、1、2、2、2、2、2、4、4、5、5、5、6、7、8、8、8、

 

总结:冒泡排序和快速排序为入门排序,需理解后再尝试编写,希望读此博客者有所收获。

本文来自风马博客,Renfr原创,如有不对之处请留言指出。

本文地址:https://blog.csdn.net/Renfr/article/details/107064969