排序算法(java)

原创 2016年08月29日 15:32:52

持续更新中

冒泡排序

程序如下:

public class BubbleSort
{
    public static void main(String args[])
    {
        int[] ages = {12,36,54,39,98,52,25,10,5,53,68,75};
        bubble(ages);
        for (int i = 0;i<ages.length ;i++ )
        {
            System.out.println(ages[i] + "  ");
        }
    }
    public static void bubble(int[] source)
    {
        //外层循环控制比较的次数,最多进行n-1次排序,n为元素个数
        //外层循环表示第i次扫描(比较)
        for (int i = source.length-1;i>0 ;i-- )
        {
            for (int j = 0; j<i;j++ )
            {
                //依次比较相邻两个元素的大小,若符合条件,则交换位置
                if (source[j] > source[j+1])
                {
                    swap(source, j, j+1);
                }
            }
        }
    }
    public static void swap(int[] source, int x, int y)
    {
        int temp = source[x];
        source[x] = source[y];
        source[y] = temp;
    }
}

下图表示第i次扫描时,依次比较相邻元素大小,并交换位置

选择排序

基本思想:首先扫描整个数组,找出最小元素,将其存放到排序序列的起始位置,然后再从剩余未排序元素中继续寻找最小元素,放到排序序列末尾。以此类推,直到所有的元素排序完毕。

程序如下:

public class SelectSort
{
    public static void main(String args[])
    {
        int[] ages = {12,36,54,39,98,52,25,10,5,53,68,75};
        selectSort(ages);
        for (int i = 0;i<ages.length ;i++ )
        {
            System.out.println(ages[i] + "  ");
        }
    }
    public static void selectSort(int[] source)
    {
        for (int i = 0;i < source.length ;i++ )
        {
            for (int j = i+1; j<source.length;j++ )
            {
                //依次比较元素i与其他元素的大小,若符合要求,交换位置
                if (source[i] > source[j])
                {
                    swap(source, i, j);
                }
            }
        }
    }
    public static void swap(int[] source, int x, int y)
    {
        int temp = source[x];
        source[x] = source[y];
        source[y] = temp;
    }
}

插入排序

基本思想:插入排序算法是一个对少量元素进行排序的有效算法。插入排序的工作原理与打牌时整理手中的牌的做法类似,开始摸牌时,我们的左手是空的,接着一次从桌上摸起一张牌,并将它插入到左手的正确位置(当手中只有一张牌时,我们可以认为这张牌已经排序好了)。为了找到这张牌的正确位置,要将它与左手中已有的每张牌从右到左依次进行比较,然后将其插入到合适的位置,这样可以保证,每当摸起新牌时,左手中的牌都是排序好的。具体算法过程描述如下:

  1. 从第一个元素开始,该元素可以认为已经被排序;
  2. 取出下一个元素,在已排序的元素序列中从后向前扫描;
  3. 将新取出的元素与已有元素两两依次比较大小,直至新元素插入到合适的位置(相当于下文程序中的循环j);
  4. 重复步骤2(相当于下文程序中的循环i);

程序如下:

public class InsertSort
{
    public static void main(String args[])
    {
        int[] ages = {12,36,54,39,98,52,25,10,5,53,68,75};
        insertSort(ages);
        for (int i = 0;i<ages.length ;i++ )
        {
            System.out.println(ages[i] + "  ");
        }
    }
    public static void insertSort(int[] source)
    {
        for (int i = 0;i < source.length ;i++ )
        {
            for (int j = i; (j>0)&&(source[j]<source[j-1]);j-- )
            {
                swap(source, j, j-1);   
            }
        }
    }
    public static void swap(int[] source, int x, int y)
    {
        int temp = source[x];
        source[x] = source[y];
        source[y] = temp;
    }
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

@ 符号 在java中是什么语法 代表什么

java中@是什么     J2SE 提供的最后一个批注是 @SuppressWarnings。该批注的作用是给编译器一条指令,告诉它对被批注的代码元素内部的某些警告保持静默。     一点背景:...
  • skyboy11yk
  • skyboy11yk
  • 2013年10月12日 16:49
  • 38732

关于java中<T>问题

关于java中问题 Jdk5.0新特性Generic Types (泛型) 原文 来源: 中国IT实验室 作者: 未知 责编: 宝良 1. 介绍 2.定义简单Java泛型 其实Java...
  • zhengqiqiqinqin
  • zhengqiqiqinqin
  • 2013年05月31日 19:22
  • 35820

Java中布尔类型操作&=,|=与^=的使用

今天在对同事的代码进行code review的时候,见到一个比较好玩的写法。“flag &= false;”,乍一看,还感觉他写错了,但是程序可以正常运行,赶紧去百度,看一下这个写法到底是怎么一回事,...
  • ziwen00
  • ziwen00
  • 2014年10月31日 16:35
  • 17989

java中==与equel的区别

值类型是存储在内存中的堆栈(以后简称栈),而引用类型的变量在栈中仅仅是存储引用类型变量的地址,而其本身则存储在堆中。     ==操作比较的是两个变量的值是否相等,对于引用型变量表示的是两个变量...
  • hellokatewj
  • hellokatewj
  • 2014年03月26日 17:43
  • 2832

java this 3种常见用法 详解

this 关键字 1.区分成员变量和局部变量 2.代表当前对象 3.构造器之间调用
  • u012176204
  • u012176204
  • 2017年01月17日 09:41
  • 3084

【数据结构】之二叉树的java实现

二叉树的定义: 二叉树是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树的形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。...
  • wuwenxiang91322
  • wuwenxiang91322
  • 2013年10月02日 09:28
  • 80312

Java可以做什么及可以给我们带来什么?

一般来说,Java是一个功能强大的软件平台。一套完整的Java平台将会给你带来如下特性: 开发工具箱:...
  • stewen_001
  • stewen_001
  • 2014年03月12日 16:06
  • 2899

Java 进度条控件的使用

利用JProcessBar类可以实现一个进度条,它本身不过是一个矩形控件,通过填充它的部分或全部来指示一个任务的执行情况,可以放置到一个新的线程中运行。 示例如下:...
  • kehyuanyu
  • kehyuanyu
  • 2014年05月19日 17:44
  • 8679

java也可以来做黑客:控制肉鸡

一般来说,通过端口扫面,知道对方的端口后,要进行一些进一步的操作,不是很难!难就难在如何想对方电脑发送命令!一般电脑会开放一个135的端口,我们通过它了做一些操作。大名鼎鼎的“冲击波”就是通过它了实现...
  • qq_35447305
  • qq_35447305
  • 2016年08月05日 08:14
  • 2231

最小堆和最大堆的JAVA实现

/** * 文件名:BinaryHeap.java * 时间:2014年11月3日下午7:15:34 * 作者:修维康 */ package chapter6; import java.ut...
  • xiuweikang
  • xiuweikang
  • 2014年11月04日 16:37
  • 4433
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:排序算法(java)
举报原因:
原因补充:

(最多只允许输入30个字)