[转载] java实现四种常用排序算法

参考链接: 用Java排序

四种常用排序算法 

##注:从小到大排 

##冒泡排序## 特点:效率低,实现简单 思想:每一趟将待排序序列中最大元素移到最后,剩下的为新的待排序序列,重复上述步骤直到排完所有元素。这只是冒泡排序的一种,当然也可以从后往前排。 

public void bubbleSort(int array[]) {

        int t = 0;

        for (int i = 0; i < array.length - 1; i++)

            for (int j = 0; j < array.length - 1 - i; j++)

                if (array[j] > array[j + 1]) {

                    t = array[j];

                    array[j] = array[j + 1];

                    array[j + 1] = t;

                }

    }

 

 

##选择排序## 特点:效率低,容易实现。 思想:每一趟从待排序序列选择一个最小的元素放到已排好序序列的末尾,剩下的为待排序序列,重复上述步骤直到完成排序。 

public void selectSort(int array[]) {

        int t = 0;

        for (int i = 0; i < array.length - 1; i++){

            int index=i;

            for (int j = i + 1; j < array.length; j++)

                if (array[index] > array[j])

                    index=j;

            if(index!=i){ //找到了比array[i]小的则与array[i]交换位置

                t = array[i];

                array[i] = array[index];

                array[index] = t;

            }

        }

    }

 

 

##插入排序## 特点:效率低,容易实现。 思想:将数组分为两部分,将后部分元素逐一与前部分元素比较,如果前部分元素比array[i]小,就将前部分元素往后移动。当没有比array[i]小的元素,即是合理位置,在此位置插入array[i] 

public void insertionSort(int array[]) {

        int i, j, t = 0;

        for (i = 1; i < array.length; i++) {

            if(a[i]<a[i-1]){

                t = array[i];

                for (j = i - 1; j >= 0 && t < array[j]; j--)

                    array[j + 1] = array[j];

                //插入array[i]

                array[j + 1] = t;

            }

        }

}

 

快速排序 

特点:高效,时间复杂度为nlogn。 采用分治法的思想:首先设置一个轴值pivot,然后以这个轴值为划分基准将待排序序列分成比pivot大和比pivot小的两部分,接下来对划分完的子序列进行快排直到子序列为一个元素为止。 

public void quickSort(int array[], int low, int high) {// 传入low=0,high=array.length-1;

        int pivot, p_pos, i, t;// pivot->位索引;p_pos->轴值。

        if (low < high) {

            p_pos = low;

            pivot = array[p_pos];

            for (i = low + 1; i <= high; i++)

                if (array[i] > pivot) {

                    p_pos++;

                    t = array[p_pos];

                    array[p_pos] = array[i];

                    array[i] = t;

                }

            t = array[low];

            array[low] = array[p_pos];

            array[p_pos] = t;

            // 分而治之

            quickSort(array, low, p_pos - 1);// 排序左半部分

            quickSort(array, p_pos + 1, high);// 排序右半部分

        }

 

 

测试demo: 

import java.util.Arrays;

public class sortTest {

    // 冒泡排序

    public void bubbleSort(int array[]) {

        int t = 0;

        for (int i = 0; i < array.length - 1; i++)

            for (int j = 0; j < array.length - 1 - i; j++)

                if (array[j] > array[j + 1]) {

                    t = array[j];

                    array[j] = array[j + 1];

                    array[j + 1] = t;

                }

    }

 

    // 选择排序

    public void selectSort(int array[]) {

        int t = 0;

        for (int i = 0; i < array.length - 1; i++){

            int index=i;

            for (int j = i + 1; j < array.length; j++)

                if (array[index] > array[j])

                    index=j;

            if(index!=i){ //找到了比array[i]小的则与array[i]交换位置

                t = array[i];

                array[i] = array[index];

                array[index] = t;

            }

        }

    }

 

public void insertionSort(int array[]) {

        int i, j, t = 0;

        for (i = 1; i < array.length; i++) {

            if(a[i]<a[i-1]){

                t = array[i];

                for (j = i - 1; j >= 0 && t < array[j]; j--)

                    array[j + 1] = array[j];

                //插入array[i]

                array[j + 1] = t;

            }

        }

}

 

    // 分治法快速排序

    public void quickSort(int array[], int low, int high) {// 传入low=0,high=array.length-1;

        int pivot, p_pos, i, t;// pivot->位索引;p_pos->轴值。

        if (low < high) {

            p_pos = low;

            pivot = array[p_pos];

            for (i = low + 1; i <= high; i++)

                if (array[i] > pivot) {

                    p_pos++;

                    t = array[p_pos];

                    array[p_pos] = array[i];

                    array[i] = t;

                }

            t = array[low];

            array[low] = array[p_pos];

            array[p_pos] = t;

            // 分而治之

            quickSort(array, low, p_pos - 1);// 排序左半部分

            quickSort(array, p_pos + 1, high);// 排序右半部分

        }

    }

 

    public static void main(String[] args) {

        // TODO Auto-generated method stub

        int[] array = { 37, 47, 23, 100, 19, 56, 56, 99, 9 };

        sortTest st = new sortTest();

        // st.bubbleSort(array);

        // st.selectSort(array);

        // st.insertionSort(array);

        st.quickSort(array, 0, array.length - 1);

        System.out.println("排序后:" + Arrays.toString(array));

    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/540353.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

[转载] Java复制对象与集合工具类

参考链接&#xff1a; Java中的类和对象 项目中经常需要将某个对象的属性值复制给另一个对象&#xff0c;或者将一个集合复制到另一个集合。利用spring提供的BeanUtils&#xff0c;自己简单封装了一个工具类。 public class CopyUtils { /** * 复制集合 */ public static &l…

.NET深入学习笔记(4):深拷贝与浅拷贝(Deep Copy and Shallow Copy)

今天继续利用准备WSE安全开发文章的空闲时间&#xff0c;完善《.NET深入学习笔记》系列&#xff08;基本都是.Net重要的知识点&#xff0c;我都做了详细的总结&#xff0c;是什么、为什么、和怎么实现&#xff09;。想必很多人也接触过这两个概念。做过C的人对深浅拷贝的概念一…

VIM一般模式操作

2019独角兽企业重金招聘Python工程师标准>>> vim介绍 vim和vi几乎是一样的&#xff0c;唯一的区别就是当编辑一个文本时&#xff0c;使用vi不会显示颜色&#xff0c;而使用vim会显示颜色。 vim有三个模式&#xff1a;一般模式&#xff0c;编辑模式&#xff0c;命令模…

[转载] 解析Java的JNI编程中的对象引用与内存泄漏问题

参考链接&#xff1a; Java对象如何存储在内存中 JNI&#xff0c;Java Native Interface&#xff0c;是 native code 的编程接口。JNI 使 Java 代码程序可以与 native code 交互——在 Java 程序中调用 native code&#xff1b;在 native code 中嵌入 Java 虚拟机调用 Java 的…

[转载] java中创建对象的方式

参考链接&#xff1a; 用Java创建对象的不同方法 java中的4种创建对象的方式&#xff1a; 在这片博文中和大家简单分享一下常见的几种创建java对象的方式 1.使用 new 的方式&#xff0c;这也是我们最常见的一种方式 我们以 Person 类来举例说明 例&#xff1a; Person p…

Exchange 2007 SP1 如何定时清理日志???

Exchange 2007 SP1 如何定时清理日志&#xff1f;&#xff1f;&#xff1f; 时间:2011-12-31 11:00Tag标签&#xff1a;来源:未知 作者:达思科技 点击: 93次此文章出自&#xff1a; 专业数据恢复 问&#xff1a;Exchange 2007 SP1 如何定时清理日志&#xff1f;&#xff1f;&am…

[转载] java-继承和多态

参考链接&#xff1a; Java中的继承 继承&#xff1a; 继承就是保持已有类的特性而构造新类的过程。继承后&#xff0c;子类能够利用父类中定义的变量和方法&#xff0c;就像它们属于子类本身一样。 单继承&#xff1a;在类层次中&#xff0c;子类只继承一个父类的数据结构…

走进SQL Server 2005:备份与恢复功能

每当有任何新的软件发布的时候&#xff0c;你通常都会发现一些你从来不知道或者从来不知道你需要的新的特性。SQL Server 2000中存在的许多的备份和恢复特性都同样保留在了SQL Server 2005中&#xff0c;但是有一些新的提高同样值得你的关注。 镜像备份 SQL Server 2005让你可以…

[转载] Java对返回值的封装

参考链接&#xff1a; 用Java封装 定义自己所需要的返回值类型 public class CodeMsg implements Cloneable { private int retCode; private String message; // 通用异常 public static CodeMsg SUCCESS new CodeMsg(0, "success"); public static CodeMsg EMP…

stateful set 学习笔记

2019独角兽企业重金招聘Python工程师标准>>> 1、创建pv # cat pv.yaml kind: PersistentVolume apiVersion: v1 metadata:name: task-pv-volumelabels:type: local spec:capacity:storage: 3GiaccessModes:- ReadWriteOncehostPath:path: "/tmp/data" 2、…

[转载] Java中对象数组的使用

参考链接&#xff1a; 如何在Java中交换或交换对象 Java对象数组使用 一、Java数组的使用二、Java的对象数组2.1 问题提出2.2 问题解析2.3 问题拆分2.4 代码实现 一、Java数组的使用 对象数组其实和Java的数组类似的&#xff0c;所以要很清楚Java的数组是如何使用的&#xf…

Python自动化开发学习13-联合唯一

联合唯一 联合唯一&#xff0c;就是一个表中的多个字段的组合需要唯一。 使用mysql语句创建 比如创建一张hosts表&#xff0c;记录登录的ip地址或者hostname&#xff08;表中对应字段host&#xff09;和 端口号&#xff08;表中对应字段port&#xff09;&#xff0c;要求host 和…

[转载] Java获取泛型T的类型 T.class

参考链接&#xff1a; Java中的抽象 import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; public class Main{ public static void main(String[] args) { Foo<String> foo new Foo<String>(){}; // 在类的外部这样获取 Type type ((…

自定义控件---重写Listbox实现item图标变换和item点击事件

博客开通有一阵了&#xff0c;就是没有时间写&#xff0c;遗憾啊。&#xff01; 这几天做了个排序的自定义控件&#xff0c;在listbox item里放是button 并支持图标的交替变换 效果如下&#xff1a; 把代码贴上&#xff1a;1using System; 2using System.Collections.…

[转载] Spring面试题整理

参考链接&#xff1a; Java中的动态方法Dispatch和运行时多态 Spring面试题整理 2018年03月07日 21:11:46 hrbeuwhw 阅读数&#xff1a;49116 Spring 概述 1. 什么是spring? spring 是个Java企业级应用的开源开发框架。Spring主要用来开发Java应用&#xff0c;但是有…

ansible: Linux批量管理神器

我们已经知道&#xff0c;基于集群可实现服务器横向扩展slace out。可是&#xff0c;当上百台主机集合成共同为一个站点提供web页面访问的形式时&#xff0c;怎么管理整个集群体呢&#xff1f; 一些小伙伴大概听说过pxe等可实现自动安装系统。可是&#xff0c;要我们一台一台主…

[转载] Python numpy函数:all()和any()比较矩阵

参考链接&#xff1a; Python中的any和all 数组元素的比对&#xff0c;我们可以直接使用“”进行比较&#xff0c;比如&#xff1a; 但是当数组元素较多时&#xff0c;查看输出结果便变得很麻烦&#xff0c;这时我们可以使用all&#xff08;&#xff09;方法&#xff0c;直接…

MySQL初识-架构-安装-初始化-连接-管理工具-数据文件

MySQL架构和结构分析 官方架构图 内部组件结构图 MySQL安装方式 MySQL初始化 MySQL工作模式及常用命令 交互式模式&#xff1a;mysql> 1234567891011121314# 交互式模式下的客户端命令mysql> help # 获取命令帮助 mysql> \? # 同上 mysql> \c # 取消命令执行 mysq…

[转载] Java基础——关联、聚合、组合

参考链接&#xff1a; Java中的关联 | 组合和聚合 一.引言 其实自己也不知道&#xff0c;在需求设计、架构设计、开发阶段是否真正需要弄明白“关联、聚合、组合”。原本计划这篇博文写“继承“和”多态”&#xff0c;但是一翻阅资料&#xff0c;基本上都会把“继承”和“组…

[转载] WSDL2Java详细使用说明【官方最全说明】

参考链接&#xff1a; Java中的this说明 WSDL to Java 命名 wsdl2java - 获取WSDL文档并生成完全带注释的Java代码&#xff0c;并实现相关服务。 概要 用例 : wsdl2java -fe|-frontend <front-end-name> -db|-databinding <data-binding-name> -wv <…