重拾java系列一java基础(3)

  这一章主要复习下以前所接触的算法,

(1)选择排序法:在要排序的一组数中,选出最小的一个数与第一个位置的数交换;然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。

 1 /**
 2      * 选择排序算法 在未排序序列中找到最小元素,存放到排序序列的起始位置
 3      * 再从剩余未排序元素中继续寻找最小元素,然后放到前面已排序序列末尾。
 4      * 以此类推,直到所有元素均排序完毕。
 5      *
 6      * @param numbers
 7      */
 8     public static void selectSort(int[] numbers) {
 9         int size = numbers.length; // 数组长度
10         int temp = 0; // 中间变量
11
12         for (int i = 0; i < size-1; i++) {//i代表最后排好顺序的index
13             int k = i; // 待确定的位置
14             // 选择出应该在第i个位置的数
15             for (int j = size - 1; j > i; j--) {
16                 if (numbers[j] < numbers[k]) {
17                     k = j;//只要后面的数要比待确定位上的数小,就往前挪到k对应位置
1819                 }
20             }
21             // 交换两个数
22             temp = numbers[i];
23             numbers[i] = numbers[k];
24             numbers[k] = temp;
25         }
26     }

(2)冒泡排序法:它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。
有重泡下沉和轻泡上浮两种形式:

重泡下沉:

public static void bubbleSort(int[] ary) {
        for (int i = 0; i < ary.length - 1; i++) {
            for (int j = 0; j < ary.length - i - 1; j++) {
                if (ary[j] > ary[j + 1]) {
                    int t = ary[j];
                    ary[j] = ary[j + 1];
                    ary[j + 1] = t;
                }
            }
        }
    }

轻泡上浮:

public static void bubbleSort(int[] ary) {
        for (int i = 0; i < ary.length - 1; i++) {
            for (int j = ary.length - 1; j >0 ; j--) {
                if (ary[j] < ary[j-1]) {
                    int t = ary[j];
                    ary[j] = ary[j - 1];
                    ary[j - 1] = t;
                }
            }
        }
    }

(3)插入排序:每步将一个待排序的记录,按其顺序码大小插入到前面已经排序的字序列的合适位置(从后向前找到合适位置后),直到全部插入排序完为止。

 1 public static void insertSort(int[] ary){
 2         int i,j,k;
 3         for(i=1; i<ary.length; i++){
 4             k = ary[i];//step1,先取出作为判断标准
 5             for(j=i-1; j>=0 && ary[j]>k; j--){
 6                 ary[j+1] = ary[j];//step2,移动a[j]-->a[j+1]
 7             }
 8             ary[j+1] = k;//step3,插入,
 9         }
10     }

其他算法请参考:http://www.cnblogs.com/0201zcr/p/4764427.html

http://www.cnblogs.com/sevenyuan/archive/2009/12/04/1616897.html

非常感谢原作者

时间: 2024-10-05 20:11:48

重拾java系列一java基础(3)的相关文章

Java系列(1)----Java特性

一.Java的关键特性1.简单性2.安全性3.可移植性4.面向对象5.健壮性6.多线程7.体系结构中立8.解释执行9.高性能10.分布式11.动态性 二.J2SE 5的主要特性1.泛型2.注解(annotation)3.自动装箱和自动拆箱4.枚举5.增强for-each风格的for循环6.可变长度参数7.静态导入8.格式化I/O9.并发实用工具 三.J2SE 7的重要特性1.String现在能够控制switch语句2.二进制整型字面值3.数值字面值下的下划线4.扩展的try语句,称为带资源的tr

【java系列】java开发环境搭建

描述 本篇文章主要讲解基于windows 10系统搭建java开发环境,主要内容包括如下: (1)安装资料准备 (2)安装过程讲解 (3)测试是否安装成功 (4)Hello Word测试 1   安装材料准备 java开发环境搭建前,需要准备JDK和Eclipse. 1.1  JDK 下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html 1.2  Eclipse 下载地址:http://www.eclips

重拾java系列一java基础

前言,不知不觉,从接触java到工作至今已有两年的时间,突然感觉自己的基础知识还很薄弱,有些知识虽然知道,但是停留在表面上,没有深挖,或者实践过,感觉掌握的很肤浅,而且时间一长,就觉得忘记了,我觉得这种状态实在不好,作为一名开发人员,不应该只是会用,能满足需求就满足,而不去深究为什么这样做就行,它的实质是什么,底层到底是怎么样的结构,这样才能达到知其然知其所以然,所以,我觉得在工作闲暇时间,重新对我所认识的java进行一遍梳理,总结,实践,希望我可以坚持下来,争取突破自己!!!         

重拾java系列一java基础(4)

本章主要回顾一些类的相关知识: (1)static: static 静态的: 属于类的资源, 使用类名访问.  静态属性: 只有一份的变量  静态方法: 是属于类方法, 可以使用类名直接访问. 静态方法中没有this引用  静态代码块: 是在类加载期间执行的代码块 延伸:代码块,在对象创建期间执行, 类似于构造器中的代码 参考例子: 1 /** 2 * 代码块: 在对象创建期间执行, 类似于构造器中的代码 3 * 静态代码块: 在类加载期间执行. 静态代码可以用于只加载一次的静态资源, 如: 图

【Java系列】【基础版】多线程基础

多线程基础 1.1 认识进程和线程 1.1.1 什么是进程 1.1.1.1 进程是正在进项的程序,是资源分配的一个基本单位,有内存分配: 1.1.2 什么是线程 1.1.2.1 线程是进程的一个执行单位,也是进程的执行顺序: 1.1.2.2 一个进程至少有一个线程,可以由两个或以上的线程: 1.1.3 JVM至少有几个线程 1.1.3.1 至少有一个或两个线程,main方法和垃圾回收线程: 1.1.4 什么是多线程 1.1.4.1 2个或以上的线程去执行 1.1.5 多线程的作用 1.1.5.1

Java系列: JAVA字符串格式化-String.format()的使用(zz)

常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象.熟悉C语言的同学应该记得C语言的sprintf()方法,两者有类似之处.format()方法有两种重载形式. format(String format, Object... args) 新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字符串. format(Locale locale, String format, Object... args) 使用指定的语言环境,制定字符串格式和参

我爱java系列---【java对象比较器,用于记录修改操作时修改的具体详情】

对象比较器 public class LogUtils<T> { /** * 对象比较器 * 比较结果eg:1.字段名称loginName,旧值:liu,新值:gu;2.字段名称address,旧值:hunan,新值:neimenggu * @param oldBean * @param newBean * @return */ public String compareObject(Object oldBean, Object newBean) { String str = "&q

[java]基础重拾

7.17 重新学习了包管理 对于没有使用package打包的类,归到默认包.使用其他包名打包类,必须在工程文件夹下新建对应包名的目录.比如 package com.tencent.demo 则需要在工程文件夹下,新建名为com的文件夹,并在com文件夹下新建tencent文件夹,再简历demo文件夹,依次类推. [java]基础重拾

【小白的java成长系列】——Java基础知识

今天来说说java的基础知识,个人感觉都不知道要说啥的,还是为后面的内容做一些铺垫吧~ 今天主要说的都是java面向对象之前的基础知识,比如数据类型呀,表达式运算符呀~等等一系列的知识,下节来说说面向对象.今天这节我就不用程序来说明,直接用文字说明.因为个人感觉真木有啥好说的,这些程序后续都会说到的,比较简单,写写就会了的..好吧~开始了... 1. Java数据类型划分: 基本数据类型:都是一个个具体的值 数值型:表示具体的数字,所有的整数默认情况下都是int,所有的小数都是double型的