数组排序之Java实现

数组排序小结

package main.java.cellar.test;

/**
 * Created by cui on 9/27/14.
 */
public class ArraySorts {
    /**
     * @param args
     */
    public static void main(String[] args) {

        int[] number = { 95, 45, 15, 44, 66, 88, 77 };

        // bubbleSort(number);

        // insertSort(number);

        // shellSort(number);

        // quickSort(number, 0, number.length - 1);
        sort(number, 0, number.length - 1);

        for (int z = 0; z < number.length; z++)
            System.out.print(number[z] + " ");

    }

    /**
     * bubble sort
     *
     * @param number
     */
    public static void bubbleSort(int[] number) {
        int temp = 0;
        for (int i = 0; i < number.length - 1; i++) {
            for (int j = 0; j < number.length - 1 - i; j++) {
                if (number[j] > number[j + 1]) {
                    temp = number[j];
                    number[j] = number[j + 1];
                    number[j + 1] = temp;
                } // if end
            }
        }

    }

    /**
     * insert sort
     *
     * @param number
     */
    public static void insertSort(int[] number) {
        int n = number.length;
        if (n < 2)
            return;

        int i, j, k;
        for (i = 1; i < n; i++) {
            // 为a[i]在前面的a[0...i-1]有序区间中找一个合适的位置
            for (j = i - 1; j >= 0; j--)
                // 如当前值大于已排序好的最大值,则直接结束
                if (number[j] < number[i])
                    break;
            // 如找到了一个合适的位置
            if (j != i - 1) {
                // 将比a[i]大的数据向后移
                int temp = number[i];
                for (k = i - 1; k > j; k--)
                    number[k + 1] = number[k];

                // 将a[i]放到正确位置上
                number[k + 1] = temp;
            }
        }

    }

    /**
     * shell sort
     *
     * @param number
     */
    public static void shellSort(int[] number) {
        int n = number.length;
        if (n < 2)
            return;

        int i, j, gap;

        for (gap = n / 2; gap > 0; gap /= 2)
            // 步长
            for (i = 0; i < gap; i++) // 直接插入排序
            {
                for (j = i + gap; j < n; j += gap) {
                    if (number[j] < number[j - gap]) {
                        int temp = number[j];
                        int k = j - gap;
                        while (k >= 0 && number[k] > temp) {
                            number[k + gap] = number[k];
                            k -= gap;
                        }
                        number[k + gap] = temp;
                    }
                }
            }

    }

    /**
     * quick sort(Divide-and-ConquerMethod) C.R.A.Hoare year 1962
     *
     * @param s
     * @param l
     * @param r
     */
    public static void quickSort(int s[], int l, int r) {
        if (l < r) {
            // 将中间的这个数和第一个数交换
            int i = l, j = r, x = s[l];
            while (i < j) {
                while (i < j && s[j] >= x)
                    // 从右向左找第一个小于x的数
                    j--;
                if (i < j)
                    s[i++] = s[j];

                while (i < j && s[i] < x)
                    // 从左向右找第一个大于等于x的数
                    i++;
                if (i < j)
                    s[j--] = s[i];
            }
            s[i] = x;
            // 分治左右,递归调用
            quickSort(s, l, i - 1);
            quickSort(s, i + 1, r);
        }
    }

    /**
     * part code of DualPivotQuicksort
     *
     * @param a
     * @param left
     * @param right
     */
    public static void sort(int[] a, int left, int right) {
        for (int i = left, j = i; i < right; j = ++i) {
            int ai = a[i + 1];
            while (ai < a[j]) {
                a[j + 1] = a[j];
                if (j-- == left) {
                    break;
                }
            }
            a[j + 1] = ai;
        }
    }
}
时间: 2024-11-10 03:33:49

数组排序之Java实现的相关文章

数组排序(java)冒泡法

public class ArrayTest03{ /* Name:数组排序,冒泡法 Power by :Stuart Date:2015-4-23*/ public static void main(String args[]){ //定义一个integer数组 int array[]={0,1,4,8,5,4,10,9}; for(int i=0;i<array.length;i++){ //第二层循环从第一层循环的元素第一次后一个开始 for(int j=i+1;j<array.leng

JAVA学习第三十课(经常使用对象API)- String类:类方法练习

intern方法 public class Main { public static void main(String[] args) { String str1 = new String("asd"); String str2 = str1.intern();/* 字符串常量池中有,就返回字符串,没有就创建 */ System.out.println(str2); System.out.println( str1 == str2 ); } } 练习1:字符串数组排序 import j

JAVA学习第三十课(常用对象API)- String类:类方法练习

intern方法 public class Main { public static void main(String[] args) { String str1 = new String("asd"); String str2 = str1.intern();/* 字符串常量池中有,就返回字符串,没有就创建 */ System.out.println(str2); System.out.println( str1 == str2 ); } } 练习1:字符串数组排序 import j

java 标识符;常量;数组

标识符 自定义标识符的规范: 1. 类名和接口名单词的首字母大写,其他单词小写. 比如: class RunTime.   interface A 2. 变量名与方法(函数)名首单词全部小写,其他单词首字母大写,其他小写.  比如: doCook(): 3. 包名全部单词小写. 4. 常量全部单词大写,单词与单词之间使用下划线分隔.  比如: UP_DIRECTION 常量 常量的类别: 整数常量   10 12 小数常量   3.14 布尔常量   布尔常量只有两个值: true(正确). f

Java 8的八个新特性

Java 8的八个新特性 作者:chszs,未经博主允许不得转载.经许可的转载需注明作者和博客主页:http://blog.csdn.net/chszs 1.接口的默认方法和静态方法 Java 8在接口方面引入了新特性. Java 8版之前,接口只有抽象方法,而在Java 8,为接口新增了两种类型的方法. 第一种是默认方法.此方法使用了default关键字修饰方法名.实际上接口不包含任何实现的方法,而在Java 8中,可以通过使用default关键字来添加默认的方法实现. 接口的实现类可以直接使

Java 集合系列之一:JCF集合框架概述

容器,就是可以容纳其他Java对象的对象.Java Collections Framework(JCF)为Java开发者提供了通用的容器 java集合主要划分为四个部分: Collection(List列表.Set集合).Map映射.迭代器(Iterator.Enumeration).工具类(Arrays.Collections) 背景 数组的优势:是一种简单的线性序列,可以快速地访问数组元素,效率高.如果从效率和类型检查的角度讲,数组是最好的.数组的劣势:不灵活.容量需要事先定义好,不能随着需

Java8的新特性

Java 8主要新特性包括如下几点: 一.接口的默认方法和静态方法 Java 8版之前,接口只有抽象方法,而在Java 8,为接口新增了两种类型的方法. 第一种是默认方法:在Java 8中,可以通过使用default关键字来添加默认的方法实现. 接口的实现类可以直接使用这些默认的方法,同时还可以重写默认的方法,这不是强制性的重写. package demo.ch; public interface Java8InterfaceDemo { abstract void add(); default

day18 集合框架(JCF)

集合框架(JCF)java collections framework 框架:为了实现某一目的/功能而预先提供的一系列封装好的具有继承或实现关系的类与接口. 1.这种框架是高性能的,对基本类集(动态数组.链接表.树.散列表)的实现是高效率的. 2.框架必须允许不同的类集以相同的方式和高度互相操作方式工作. 3.类集必须是容易扩展和修改的. 为了实现这些目标,类集框架被设计成包含了一组标准接口的类与接口: Collection 是存放一组单值的最大接口. List--列表 是Collection的

java中数组排序.知识点

import java.util.*; //选择排序 class SwitchTest { public static void main(String[] args) { int[] arr = {3,5,6,23,45,2}; //排序前 printArray(arr); //排序后 // selectSort(arr); Arrays.sort(arr);//java中已经定义好的一种排序方式,开发中,对数组排序,要使用该句代码 // bubbleSort(arr); printArray