冒泡排序与快速排序详解

2022-08-10,,,

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

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

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

《冒泡排序与快速排序详解.doc》

下载本文的Word格式文档,以方便收藏与打印。