Java 冒泡排序与快速排序的实现

冒泡排序

     基本特点

      (1)基于交换思想的排序算法         (2)从一端开始,逐个比较相邻的两个元素,发现倒序即交换。           (3)一次遍历,一定能将其中最大(小)的元素交换到其最终位置上

    排序过程模拟

    代码实现

static void Bubble_Sort(int array[]){
        for(int i=0;i<array.length;i++)
        {
            for(int j=0;j<array.length-i-1;j++)
            {
                if(array[j]<array[j+1])
                {
                    int temp=array[j];
                    array[j]=array[j+1];
                    array[j+1]=temp;
                }
            }
            System.out.print("第"+(i+1)+"次排序的结果:");
            for(int c=0;c<array.length;c++)
            {
                System.out.print(array[c]+"\t");
            }
            System.out.println();
        }
        
    
        System.out.print("最终排序结果:");
        for(int c=0;c<array.length;c++){
            System.out.print(array[c]+"\t");
        }
    }

快速排序

  基本思想

     选定一个元素作为中间元素,然后将表中所有元素与改中间元 素相比较,将表中比中间元素小的元素调到表的前面,将比中间元素大的元素 调到后面,再将中间元素放在

     这两部分之间以作为分界点,这样便得到一个划分。 然后再对左右两部分分别进行快速排序,直到每个子表仅有一个元素或为空表为止。

  划分方法

      1.中间元素的选择:作为参考点的中间数的选择没有特别的规定, 本次默认为第一个元素。

      2.中间元素所占空间可能被其他元素占用,为此,可先保存该元素的值到其他位置以腾出起空间。

      3.这样,前面便有一个空位置(i),可从最后面开始往前搜索一个比中间数大的元素,并将其放置到后面的这个位置上。

             4.此刻,后面便有了一个空位置(j),可从前面开始往后搜索一个比中间数小的元素,并将其放置到前面的位置。4.重复1 2 ,直到两边搜索的空位重合(i=j)。

  排序过程模拟

  代码实现

static int partition(int array[],int start,int end){
        int temp=array[start];
        int i=start;
        int j=end-1;
        while(i!=j){
            while(i<j&&array[j]>temp){
                j--;
            }
            if(i<j){
                array[i]=array[j];
                i++;
            }
            while(i<j&&array[i]<temp){
                i++;
            }
            if(i<j){
                array[j]=array[i];
                j--;
            }
            
        }
        array[i]=temp;
        return i;    
    }
    
    static void QuickSort(int a[],int s,int e){
        if(s<e){
            int i=partition(a, s, e );
            QuickSort(a, s,i-1);
            QuickSort(a, i+1, e);
        }
        
    }

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏专注 Java 基础分享

虚拟机字节码执行引擎

所谓的「虚拟机字节码执行引擎」其实就是 JVM 根据 Class 文件中给出的字节码指令,基于栈解释器的一种执行机制。通俗点来说,也就是 JVM 解析字节码指令...

42880
来自专栏程序员互动联盟

【编程基础】如何了解c语言中的位运算?

计算机的各种运算最小单位是字节,但是有时候只对某个位(bit)感兴趣,C语言提供了一些列位运算符来完成这个任务。这些操作非常重要,尤其是在嵌入式开发中会常常用到...

45050
来自专栏java 成神之路

Java 对象占用内存大小

42760
来自专栏CreateAMind

coach运行流程梳理

11020
来自专栏Golang语言社区

Golang语言之异常处理

在编写Go语言代码的时候,我们应该习惯使用error类型值来表明非正常的状态。作为惯用法,在Go语言标准库代码包中的很多函数和方法也会以返回error类型值来表...

358130
来自专栏Petrichor的专栏

python: TODO 助记符

TODO 在 python 中作为一种 助记符 (Mnemonics),用来解释 将要做什么 。

16620
来自专栏闻道于事

Java之StringBuffer,StringBuilder,Math,Date,SimpleDateFormat,UUID,File

java.lang  类 StringBuffer java.lang.Object java.lang.StringBuffer 所有已实现的接口:...

39960
来自专栏我爱编程

Day12面向对象高级编程3/3

使用元类 type() class Hello(object): def hello(self,name='World!'): prin...

36170
来自专栏程序员互动联盟

【编程基础】Java里面如何对字符串排序?

前几天有同学在群里问一个Java面试题,上面的思路很正确大概分为几步: 1、分割字符串: 用到的方法是String类的 public String[] spl...

72190
来自专栏web前端教室

重学javascript 红皮高程(3)

继续啊,继续JS基础知识补全之路。 昨天说到JS的几种数据类型,像我这种脑子不太好使,记不清JS共有几种对象的人,可以这么记,JS这东西根本不支持自定义类型,所...

22990

扫码关注云+社区

领取腾讯云代金券